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