簡體   English   中英

與std :: unique_ptr相關的錯誤

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM