我遇到了 std::unique_ptr 的问题。我以为我理解它们,但显然不是。
我有以下代码:
X::X() : m_foo(nullptr),
{
m_foo = std::unique_ptr<Foo>(new Foo());
}
X::X(Foo* foo) : m_foo(nullptr),
{
m_foo = std::unique_ptr<Foo>(foo);
}
std::unique_ptr<Foo> m_foo;
当我按如下方式构造 X 时:
Foo foo;
X x(&foo);
我在运行时收到一条错误消息,告诉我“对象 0x101f7eec0 出错:未分配正在释放的指针”。
但是,当我按如下方式构造 X 时:
Foo foo;
X x;
没有发生这样的错误。
如果我添加以下析构函数:
X::~X()
{
m_foo.release();
}
一切正常。
我不太确定为什么首先会出现错误,也不确定为什么释放 foo 会清除错误。
谁能解释一下。
最佳答案
std::unique_ptr
用于管理动态分配对象(即使用 new
等创建的对象)的生命周期。
在您失败的示例中,foo
是使用自动存储创建的,因此无需管理其生命周期(无论如何尝试这样做都会导致您观察到的错误)。一旦超出范围,编译器将自动销毁它。
关于c++ - 与 std::unique_ptr 关联的错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24695525/