[英]Error associated with std::unique_ptr
我在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
,因此無需管理其生存期(無論如何嘗試這樣做都會導致您觀察到的錯誤)。 一旦超出范圍,編譯器將自動銷毀它。
當你這樣做
Foo foo;
X x(&foo);
foo在堆棧中分配。 堆棧中的對象不能包含在unique_ptr中。 僅當對象在堆中時才可以這樣做:
Foo* foo = new Foo( );
X x( foo );
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.