调用派生和基础析构函数的虚拟析构函数

时间:2013-02-18 09:40:32

标签: c++ derived virtual-destructor

我无法理解虚拟功能。当我重载一个虚函数时,新的派生函数是否只被调用?或者派生和基本功能?因为我注意到在调用虚拟析构函数时,会调用基类和派生类析构函数。

2 个答案:

答案 0 :(得分:4)

在这方面,析构函数是特殊的成员函数 如果你有一个虚基类析构函数,那么它将在多态删除期间正确调用Base和派生类析构函数(在基类指针pointinf上调用delete到派生类对象。)。

但是,其他虚拟成员函数与析构函数不具有相同的特殊状态。仅调用为适当对象类型定义的函数。如果您需要调用任何其他函数,则需要明确地执行此操作。

答案 1 :(得分:2)

派生类对象只不过是基类对象的一种包装器。 因此,在析构函数的情况下,应该调用两个析构函数,这是一种预期的行为。

在虚函数的情况下,您有机会替换基类中的函数。因此使用基类指针来保存派生类对象只会调用派生类中的虚函数。