虚拟析构函数与RAII一起使用

时间:2017-10-06 22:13:10

标签: c++

我的问题如下:以下代码是否正确:

class A {}; // no virtual destructor

class B : public A{
    std::unique_ptr<int> ptr{new int(5)};
};

// in main
std::unique_ptr<A> = new B;

它可能会有一些编译错误,但只是理解这个概念。指针是否会被正确删除(我的意思是ptr会被删除吗?)或者我们是否需要虚拟析构函数来确保

1 个答案:

答案 0 :(得分:5)

std::unique_ptr这样的智能指针只封装了资源管理。它不会改变指针的语义或类型的多态使用。

因此,您将通过指向B的指针删除A而不使用虚拟数据,这仍然是未定义的行为。就像使用原始指针一样。