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

Ant*_*ier 0 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;
Run Code Online (Sandbox Code Playgroud)

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

Sto*_*ica 5

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

因此,您将B通过指向A没有虚拟数据的指针删除,这仍然是未定义的行为.就像一个原始指针一样.