【发布时间】:2017-10-08 23:52:33
【问题描述】:
当我试图以多态方式删除派生对象时(即:基类具有 public virtual destructor),为什么仍然调用派生类 private destructor?为什么范围解析 private 在这里不起作用。
class Base
{
protected:
Base() { cout << "Base constructor.\n"; }
public:
virtual ~Base() { cout << "Base destructor.\n"; }
};
class Derived :public Base
{
public:
Derived() { cout << "Derived constructor.\n"; }
private:
~Derived() { cout << "Derived destructor.\n"; }
};
int main()
{
Base *p = new Derived();
delete p;
}
输出:
Base constructor.
Derived constructor.
Derived destructor.
Base destructor.
【问题讨论】:
-
因为你是通过基类指针调用派生dtor...
标签: c++ oop virtual-destructor scope-resolution