【发布时间】:2014-01-15 04:05:39
【问题描述】:
为什么当使用 std::shared_ptr 解除分配从基类和派生类调用析构函数时,而第二个示例仅从基类调用析构函数?
class Base
{
public:
~Base()
{
std::cout << "Base destructor" << std::endl;
}
};
class Derived : public Base
{
public:
~Derived()
{
std::cout << "Derived destructor" << std::endl;
}
};
void virtual_destructor()
{
{
std::cout << "--------------------" << std::endl;
std::shared_ptr<Base> sharedA(new Derived);
}
std::cout << "--------------------" << std::endl;
Base * a = new Derived;
delete a;
}
输出:
--------------------
Derived destructor
Base destructor
--------------------
Base destructor
我期望在这两种情况下都有相同的行为。
【问题讨论】:
-
你的基础析构函数一开始就不是虚拟的。你在找麻烦……
标签: c++ shared-ptr