AJ *_*Tan 1 c++ polymorphism inheritance delete-operator virtual-destructor
例子:
class Base {
public:
virtual void f() = 0;
virtual ~Base() { std::cout << "Base::~Base()\n"; }
};
class Derived : public Base {
public:
void f() { }
~Derived() { std::cout << "Derived::~Derived()\n"; }
};
int main() {
Base* p = new Derived();
delete p;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
输出:
Derived::~Derived()
Base::~Base()
Run Code Online (Sandbox Code Playgroud)
我认为只会调用派生类析构函数,因为要释放的指向对象是派生类的实例。
我有两个问题:
为什么调用虚拟基析构函数?
因为基类应该被正确地破坏。派生类不可能做到这一点。
阻止基类析构函数被调用在法律上是否可能(或者甚至应该可能)?
不,因为它会阻止正确破坏基类(即调用它的成员析构函数)
| 归档时间: |
|
| 查看次数: |
203 次 |
| 最近记录: |