我記得幾年前在會議演講中觀看 Herb Sutter,試圖按照以下思路制定指導方針:
如果一個函式在堆上創建了一個新物件,那么它應該總是將它作為一個 unique_ptr 回傳。
這個想法是它更安全,并且可以揭示意圖。
令我驚訝的是,今天的 CPP 核心指南似乎缺少該指南。
這個指南有問題嗎?它被遺棄了嗎?
我們是否應該撰寫如下函式:
MyObject *create(Params p) {
return new MyObject(p);
}
或者
unique_ptr<MyObject> create(Params p) {
return make_unique<MyObject>(p);
}
uj5u.com熱心網友回復:
令我驚訝的是,今天的 CPP 核心指南似乎缺少該指南。
本指南由C 核心指南提供。本指南與工廠函式有關,工廠函式的主要目的是構造和初始化一個新物件。
請參閱C.50:如果您在初始化期間需要“虛擬行為”,請使用工廠函式,其中指出:
注意工廠的回傳型別通常應
unique_ptr默認為 [...]
uj5u.com熱心網友回復:
它包含在 I11 下的 C 核心指南中:
https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#i11-never-transfer-ownership-by-a-raw-pointer-t-or-reference-t
你應該做的是:
MyObject create(Params p) {
return MyObject(p);
}
只有當您絕對需要參考機制時,即構造多型物件并回傳基類時,您才應該這樣做:
unique_ptr<MyObject> create(Params p) {
return make_unique<MyObject>(p);
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/479436.html
上一篇:使用連接將字符轉換為字串時的垃圾
