[英]std::unique_ptr::reset and constructor exceptions
如果初始化一個unique_ptr
如下所示:
std::unique_ptr<Foo> i;
i.reset( new Foo() );
但是從Foo::Foo()
拋出異常,問題是:分配的內存會發生什么? unique_ptr如何避免泄露? 這是在new
運營商內部處理的事情嗎?
當范圍退出時,肯定會調用析構函數。 由於reset
通話不會被調用,直到new Foo()
返回時,似乎這必須辦理new
,由當異常離開構造函數釋放分配的內存。
這是怎么回事?
如果在Foo
的構造函數中拋出異常,那么唯一指針的reset
函數永遠不會在第一個位置執行。 因此,唯一指針保留其原始值。
如果對象構造拋出異常,則new
表達式不會泄漏內存。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.