簡體   English   中英

由boost :: shared_ptr處理的C ++初始化數組

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

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