c++中虚析构函数的使用(除析构顺序正确性外)

Uses of a Virtual destructor in C++(other than desctruction order correctness)

本文关键字:析构 顺序 正确性 析构函数 c++      更新时间:2023-10-16

每个c++程序员都知道,虚析构函数用于确保继承层次结构中对象的正确析构顺序。

在其他实时场景中使用/可以使用"虚拟析构函数"的地方?

你的假设是不正确的;virtual时,不影响破坏顺序。那总是从大多数派生类到基类。会影响实际调用哪些析构函数!如果不将析构函数声明为虚函数,那么从大多数派生析构函数开始的整个析构函数链可能永远不会被调用。

如果没有虚析构函数,调用链将从指针或引用的静态类型的最派生类开始。如果您的实际对象是派生类型,则会有未定义的行为,因为这些析构函数会被跳过。 例如:

class A { ... }; // base class
class B: public A { ... }; // derived class
class C: public B { ... }; // further derived
A* ABCFactory() { return new C; }
A* a = ABCFactory();
delete a;            // undefined behavior as destructors C and B are skipped