面试题:新建一个C++的空类,会产生那些函数。
class Empty{
};
编译器处理后:生成如下:
class Empty{
public:
Empty();//构造函数
Empty(const Empty&);//拷贝构造函数
~Empty();//析构函数
Empty& opteror=(const Empty&);//赋值运算符
Empty* opteror&();//取址运算符
const Empty* opteror&() const;//取址运算符 const
};
每次遇到这个问题,我都会思考:
为什么C++编译器会自动生成这几个函数而不生成其他函数呢?所有上述函数都会同时产生吗?还是说编译器检测到使用到某函数时,才会定义他们呢?他们有什么作用?什么时候起作用?
所有问题都是有依据的,在这里,我分为几部分来解析。
注意:并不是直接回答上述问题,因为知识点我是根据问题来拆分的。
[C++]new/delete:重载构造和合理定义析构
[C++]operator overlord:重载赋值运算符
[C++]copy constructor and copy assignment operator:复制拷贝函数与赋值运算符的讨论