赋值操作符和复制构造函数语义学几乎一样,我只列出展示Memberwise Copy语义。
- 当class内含一个member object,而其class有一个copy assignment operator时。
- 当一个class的base class有一个copy assignment operator时。
- 当一个class声明了任何virtual functions(我们一定不要拷贝右端class的vptr地址,因为它可能是一个derived class object)时。
- 当class继承自一个virtual base class(不论此base class 有没有copy operator)时。
析构函数语义学
析构函数也并不是默认会自动生成的。析构函数在以下两种情况下由编译器合成。
- 这个class含有member object,这个object有析构函数。
- 这个类的基类有析构函数。
编写以下例子测试:
该程序的汇编代码如下:
并没有析构函数,因为B没有析构函数,当我给B加一个什么都不做的析构函数时,反汇编代码如下:
在return语句之后,编译器生成了一个析构函数。