📔 第三章 构造、析构、赋值 读书笔记
T5. Know what functions C++ silently writes and calls¶
如果未声明任何构造函数,编译器会为其声明一个 default构造函数
。
一般会自动生成
copy构造函数
、copy赋值操作符
、析构函数
。
所有的函数都是 public 且 inline。 例如:
编译器产生的析构函数是
non-virtual
,除非这个类(class)
的基类(base class)
自身声明中有virtual 析构函数
。
对于编译器生成的 copy构造函数
和 copy 赋值操作符
,只是简单地将源对象中的每一个non-static成员变量拷贝到目标对象中。
5.1 总结¶
编译器会暗自为 class
创建 default构造函数、copy构造函数、copy assignment操作符以及析构函数
。
T6. 若不想使用编译器自动生成的函数,则明确拒绝¶
在T5中介绍,如果不声明 copy构造函数
和 copy赋值操作符
函数,则编译器会在被调用时自动生成。
为了解决自动生成的方法:主动对函数进行声明为private。【做法不是绝对安全】
另外一种方法:通过设计一个基类来继承,从而减少代码的重复。
缺点:会出现多重继承。
在boost库中提供 noncopyable
函数。
总结:为驳回编译器自动(暗自)提供的机能,将相应的 成员函数声明为 private 并且不予实现。