[英]C++ Initialization array handled by boost::shared_ptr
在我的課堂上,我想有一些動態分配的布爾數組。 我使用shared_ptr
來保存它:
boost::shared_ptr<bool[]> someBoolArray;
內存分配發生在類構造函數中:
// someValue was read from file
someBoolArray = boost::shared_ptr<bool[]>(new bool[someValue]);
可以在shared_ptr初始化期間為我的數組設置初始值嗎?
我希望默認情況下數組中的所有值為false。
如果要確保將元素設置為false
,則需要一個類型的表達式
new T[N]();
在這種情況下,
someBoolArray = boost::shared_ptr<bool[]>(new bool[someValue]());
// ^^
在C ++ 11中,您可以將初始化方法傳遞給數組:
new bool[someValue] {false}
我建議您使用make_shared而不是表單。
如果您沒有 C ++ 11,則需要用清除其構造函數中的數組的類來替換bool
數組,因為只能在分配對象數組時使用默認的構造函數。 此類應包含bool*
並具有用於bool*
和const bool*
類型轉換運算符,以及重載的operator []
。
或者您可以放棄在構造時清除數組,而在someBoolArray = ...
行之后添加for
循環來進行清除。 兩種方法都會產生相同的編譯代碼。
順便說一句,無法使用默認構造函數以外的構造函數創建對象數組是C ++ 11解決的語言缺陷。
shared_ptr不能那樣工作,例如,將shared_ptr應用於數組:是否應該使用它? 和C ++ 11是否為動態分配的數組(如Boost的scoped_array)提供包裝器? 。
在回答您的問題時,默認構造的bool(與new bool[4711]()
)應該已經具有false值,因此您應該可以。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.