1.如果你定义一个空类,C++会自动为你生成默认构造函数,析构函数,复制构造函数,赋值操作符(operator=)
class Empty{};
<==>
class Empty
{
Empty() { ... }
Empty(const Empty& rhs) { ... }
~Empty() { ... }
Empty& operator=(const Empty& rhs) { ... }
};
2.在类中,只要没有自己声明析构函数,复制构造函数,赋值操作符(operator=),C++都会自动为你生成
如果你没有自己声明任何构造函数,编译器也会为你定义一个默认构造函数
3.C++自动为你生成的
析构函数 ==》 调用每个类成员的析构函数
复制构造函数 ==》 调用每个类成员的复制构造函数
赋值操作符 ==》 调用每个类成员的赋值操作符
4.复制构造函数
class A
{
public:
A() { ... }
A(const A& rhs);
~A() { ... }
A& operator=(const A& rhs) { ... }
private:
Type1 m_1;
Type2 m_2;
...
};
如果你这样定义复制构造函数:
A::A(const A& rhs)
{
...
}
那么在调用复制构造函数产生A类型对象的时候,实际上是针对每个类成员调用类成员的默认构造函数
如果你这样写:
A::A(const A& rhs)
: m_1(rhs.m_1), m_2(rhs.m_2) ...
{
...
}
那实际上调用的是每个类成员的复制构造函数