复制构造函数和赋值函数的区别

1、复制构造函数是一个对象来初始化一块内存区域,这块内存就是新对象的内存区。

例如:

class A ;

A a;

A b=a;//复制构造函数调用;或A b(a);

而赋值函数是对于一个已经被初始化的对象来进行operator=操作。

例如:

class A;

A a;

A b;

b=a;

2、一般来说是在数据成员包含指针对象的时候,应对两种不同的处理需求:一种是复制指针对象,一种是引用指针对象。复制构造函数在大多数情况下是复制,赋值函数则是引用对象。

3、实现不一样。复制构造函数首先是一个构造函数,它调用的时候是通过参数传递来的那个对象来初始化产生一个对象。赋值函数则是把一个对象赋值给一个原有的对象,所以,要检查一下两个对象是不是同一个对象,如果是的话就不做任何操作直接返回本对象的引用,如果原来的对象中有内存分配,要先把内存释放掉。

时间: 2024-10-29 04:01:18

复制构造函数和赋值函数的区别的相关文章

复制构造函数 与 赋值函数 的区别(转)

转自:jihite 构造函数.析构函数.赋值函数是每个类最基本的的函数.每个类只有一个析构函数和一个赋值函数.但是有很多构造函数(一个为复制构造函数,其他为普通构造函数.对于一个类A,如果不编写上述四个函数,c++编译器将自动为A产生四个默认的函数,即: A(void)                                    //默认无参数构造函数 A(const A &a)                         //默认复制构造函数 ~A(void);         

复制构造函数 与 赋值函数 的区别

构造函数.析构函数.赋值函数是每个类最基本的的函数.每个类只有一个析构函数和一个赋值函数.但是有很多构造函数(一个为复制构造函数,其他为普通构造函数.对于一个类A,如果不编写上述四个函数,c++编译器将自动为A产生四个默认的函数,即: A(void)                                    //默认无参数构造函数 A(const A &a)                         //默认复制构造函数 ~A(void);                   

拷贝构造函数与赋值函数的区别

1.从概念上区分:复制构造函数是构造函数,而赋值操作符属于操作符重载范畴,它通常是类的成员函数 2.从原型上来区分:复制构造函数原型ClassType(const ClassType &);无返回值赋值操作符原型ClassType& operator=(const ClassType &);返回值为ClassType的引用,便于连续赋值操作 3.从使用的场合来区分:复制构造函数用于产生对象,它用于以下几个地方:函数参数为类的值类型时.函数返回值为类类型时以及初始化语句,例如(示例了

C++复制构造函数和赋值符的区别

From  http://blog.csdn.net/randyjiawenjie/article/details/6666937 感谢原作者分享. class CTest{public: CTest(); //构造函数 CTest(const CTest &); //复制构造函数 CTest & operator = (const CTest &); //赋值符}; CTest::CTest(){ cout<<"Constructor of CTest&qu

C++ 拷贝构造函数与赋值函数的区别(很严谨和全面)

这里我们用类String 来介绍这两个函数: 拷贝构造函数是一种特殊构造函数,具有单个形参,该形参(常用const修饰)是对该类类型的引用.当定义一个新对象并用一个同类型的对象对它进行初始化时,将显式使用拷贝构造函数.为啥形参必须是对该类型的引用呢?试想一下,假如形参是该类的一个实例,由于是传值参数,我们把形参复制到实参会调用拷贝构造函数,如果允许拷贝构造函数传值,就会在拷贝构造函数内调用拷贝构造函数,从而形成无休止的递归调用导致栈溢出. 赋值函数,也是赋值操作符重载,因为赋值必须作为类成员,那

复制构造函数 与 赋值操作函数

1 class Widget{ 2 3 Widget(); //默认构造函数 4 5 Widget(const Widget& rhs); //复制构造函数 6 7 Widget& operator= (const Widget& rhs);//赋值操作函数 8 9 }; 10 Widget w1; //调用默认构造函数 11 Widget w2(w1); //调用复制构造函数 12 w1 = w2 ; //调用赋值操作函数 上面的语句很好理解,但是需要我们注意的是“=”也可以用来

C++11六大函数(构造函数,移动构造函数,移动赋值操作符,复制构造函数,赋值操作符,析构函数)

在C++中,有三大函数复制控制(复制构造函数,赋值操作符,析构函数),而在C++11中,加入了移动构造函数,移动赋值操作符.我就斗胆将他们命名为六大函数好了. 一.构造函数 c++primer中说过:构造函数是特殊的成员函数,只要创建类类型的新对象,都要执行构造函数.构造函数的工作就是保证每个对象的数据成员具有合适的初始值. 构造函数与其他函数不同:构造函数和类同名,没有返回类型. 构造函数与其他函数相同:构造函数也有形参表(可为void)和函数体.  (参数表为void的构造函数为默认构造函数

C++ Primer 学习笔记_54_类与数据抽象 --复制构造函数、赋值操作符

复制控制 --复制构造函数.赋值操作符 引言: 当定义一个新类型时,需要显式或隐式地指定复制.赋值和撤销该类型的对象时会发生什么– 复制构造函数.赋值操作符和析构函数的作用!      复制构造函数:具有单个形参,该形参(常用const修饰)是对该类类型的引用.当定义一个新对象并用一个同类型的对象对它进行初始化时,将显式的使用复制构造函数:当将该类型的对象传递给函数或者从函数返回该类型的对象时,将隐式使用复制构造函数.     析构函数:作为构造函数的互补,当对象超出作用域或动态分配的对象被删除

拷贝构造函数和赋值函数的一些知识

/*******************拷贝构造函数和赋值运算符重载有以下两个不同之处***************************/ 1.拷贝构造函数生成新的类对象,而赋值运算符不能. 2.由于拷贝构造函数是直接构造一个新的类对象,所以在初始化这个对象之前不用检验源对象是否和新对象相同,而复制操作符需要这个操作,另外赋值运算符中如果原来对象中有内存分配,要先把内存释放掉. 下面是String类的一个实现的部分函数,可以看出二者的区别. 1 class String{ 2 public: