我無法找到答案,這個簡單的問題:使用new創建構造函數拋出的對象時,是否泄漏構造的對象?
因爲在它的構造函數拋出了一個類:
class Foo {
Foo() { throw std::logic_error(); }
}
,如果我創建使用new
操作此類的新對象,然後做我泄露創建的對象?
new Foo(); // << does this leak the Foo?
我無法找到答案,這個簡單的問題:使用new創建構造函數拋出的對象時,是否泄漏構造的對象?
因爲在它的構造函數拋出了一個類:
class Foo {
Foo() { throw std::logic_error(); }
}
,如果我創建使用new
操作此類的新對象,然後做我泄露創建的對象?
new Foo(); // << does this leak the Foo?
將運行不,您不會有內存泄漏。然而,公平地說,拋出構造函數通常被認爲是不好的做法,因爲你最終可能會構造一個對象(取決於你的類),然後你應該依靠你的類的用戶來檢測構造失敗測試某種標誌變量。
不,如果Foo
的構造函數拋出,這意味着一個Foo
對象從來沒有存在過。那裏沒有泄漏。如果您有數據成員已被初始化,那麼這些成員的單個析構函數將作爲例外離開構造函數的塊範圍