Effective C++ 条款09:绝不在构造和析构的过程中调用虚函数

构造一个派生类对象需要从基类开始构造,先构造了基类才有派生类。然而,我们 希望派生类在构造其基类部分的时候使用派生类所实现的方法。

根据多态的思想,我们可能在基类中写一个虚函数。然后在基类的构造函数中调用这个虚函数。这样似乎派生类在构造基类部分的时候,就可以通过这个虚函数调用自身实现的版本。但实际上这是行不通的。

因为派生类在构造基类的时候,它的类别就是基类。根本没有派生成分。因此,就算是虚函数,也只能调用基类的那个版本。

析构函数也是同理,当析构函数调用的时候,对象的类别也退化成了基类。不存在派生类版本的实现,所以也只会调用基类的实现。

如果非要在基类的构造或者析构过程中使用到派生类的东西。可以将必要的信息以参数的形式传递给基类的构造或者析构函数,在基类中实现这个功能。而不是以虚函数的形式进行调用。

posted @ 2021-07-01 15:08  Destiny233  阅读(56)  评论(0)    收藏  举报