我的问题如下:以下代码是否正确:
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会被删除吗?)或者我们是否需要虚拟析构函数来确保它
像智能指针一样std::unique_ptr只封装了资源管理.它不会改变指针的语义或类型的多态使用.
因此,您将B通过指向A没有虚拟数据的指针删除,这仍然是未定义的行为.就像一个原始指针一样.