Effective C++ 06 C++析构函数 02 木灵的炼金工作室

这是Effective C++的学习记录。

条款09:不在构造函数和析构函数中调用虚函数

当一个派生类被构造函数构造时,它会首先调用基类的构造函数。此时基类的虚函数表还未指向派生类函数,所以如果此时基类的构造函数调用了虚函数,那么它会调用基类的成员,这通常是超出预期的。

也就是说,在构造函数中,基类的虚函数没有虚函数性质。这是因为虚函数表尚未被建立,基类不知道需要调用哪一个重载函数。

同样的,析构函数也有相同的规则。派生类首先被析构,此时虚函数表信息被释放,若调用了虚函数,动态联编同样会调用基类的函数。

我们只需要理解这一条款的底层原因即可。如果你在编码实践中犯了这个错误,静态代码审查工具会指出你的问题。


Copyright AmachiInori 2017-2021. All Right Reserved.
Powered By Jekyll.
amachi.com.cn