标签:析构函数 目标 形参 成员 更改 type 调用 size 赋值运算符重载
(有的说法是4个,有的说法是6个)
一个空类,会有一个默认占位大小,sizeof的结果是1
sizeof(A) > 0 是因为标准规定完整对象的大小为正数。
四个默认函数
所以合理的回答应该是 6个默认函数,编译器会按需要实现。一旦程序员干涉了(声明,定义都算),编译器将不再生成默认版本
常见的比如:将拷贝构造函数声明为private,以禁止编译器生成默认版本,同时禁止本类的拷贝行为
People(const People&p);
1) 为什么必须是当前类的引用呢?
如果拷贝构造函数的参数不是当前类的引用,而是当前类的对象,那么在调用拷贝构造函数时,会将另外一个对象直接传递给形参,这本身就是一次拷贝,会再次调用拷贝构造函数,然后又将一个对象直接传递给了形参,将继续调用拷贝构造函数……这个过程会一直持续下去,没有尽头,陷入死循环。
2) 为什么是 const 引用呢?
拷贝构造函数的目的是用其它对象的数据来初始化当前对象,并没有期望更改其它对象的数据,添加 const 限制后,这个含义更加明确了。
将对象所持有的其它资源(一般是程序员进行了新的内存开辟)一并拷贝的行为叫做深拷贝,我们必须显式地定义拷贝构造函数才能达到深拷贝的目的。
如果不实现的话,仅仅只会拷贝指针,不会拷贝指针指向的内存对象。
将其它类型转换为当前类类型需要借助转换构造函数(Conversion constructor)。转换构造函数也是一种构造函数,它遵循构造函数的一般规则。转换构造函数只有一个参数。
People(int age): m_Age(age), m_Name(""){ } //转换构造函数
和转换构造函数的作用刚好相反
标签:析构函数 目标 形参 成员 更改 type 调用 size 赋值运算符重载
原文地址:https://www.cnblogs.com/ming-fei/p/14616816.html