C++的空类有哪些成员函数?
缺省构造函数。
缺省拷贝构造函数。
缺省析构函数。
缺省赋值运算符。
缺省取址运算符。
缺省取址运算符 const。
请问以下两份代码=符号的区别:
代码1:
Base b1; Base b2; b2 = b1;
和代码2:
Base b1; Base b2 = b1;
代码1中,=表示赋值符号,而代码2中,表示拷贝构造,等价于Base b2(b1)
测试
代码3:
#include#include using namespace std; class Base { public: Base() { m_nCount = 50; cout<<"Base()"<<" this="< Base() this=0x7ffeefbff3a8 Base::show m_nCount=50 this=0x7ffeefbff3a8 Base() this=0x7ffeefbff378 operator= this=0x7ffeefbff378 Base::show m_nCount=150 this=0x7ffeefbff378
结论:
所以,=符号,有时不一定就是赋值运算符号,也可以是拷贝构造函数;
如果将拷贝构造设置为private,将会禁止拷贝对象,同时禁止=,但是不能阻止赋值;
也就是代码1会报错,但是代码2仍然正常运行。
拷贝构造函数和赋值运算符重载有以下两个不同之处:
(1) 拷贝构造函数生成新的类对象,而赋值运算符不能。
(2) 由于拷贝构造函数是直接构造一个新的类对象,所以在初始化这个对象之前不用检验源对象是否和新建对象相同。而赋值运算符则需要这个操作,另外赋值运算中如果原来的对象中有内存分配要先把内存释放掉
注意:当有类中有指针类型的成员变量时,一定要重写拷贝构造函数和赋值运算符,不要使用默认的。
引用:
https://blog.csdn.net/BostonRayAlen/article/details/93041395



