专业做网站 郑州国内比百度好的搜索引擎
条款06:了解C++默默编写并调用哪些函数
Know what functions C++ silently writes and calls
编译器会为空类生成一个copy构造函数、copy assignment操作符和一个析构函数。此外如果你没有声明任何构造函数,它也会生成一个默认构造函数。
(对C++11,应该是还会生成移动构造函数和移动赋值运算符。同时,当用户自定义移动构造函数,或移动赋值运算符,或拷贝构造函数,或拷贝赋值运算符,或析构函数时,编译器不会自动生成移动构造函数和移动赋值运算符)
这里延伸出来一个五法则:当你显式定义上述五个函数其中之一时,则需要同时显式定义其余四个。
默认生成的copy构造函数和copy assignment操作符只是单纯的将源对象中的每一个non-static成员变量拷贝到目标对象(浅拷贝)。
若一个类中存在const成员或引用成员,则不能使用默认生成的拷贝赋值操作符。