0

私のクラスでは、動的に割り当てられたブール配列が必要です。私はshared_ptrそれを保持するために使用します:

boost::shared_ptr<bool[]> someBoolArray;

メモリ割り当てはクラス コンストラクターで行われます。

// someValue was read from file
someBoolArray = boost::shared_ptr<bool[]>(new bool[someValue]); 

shared_ptr の初期化中に配列の初期値を設定することはできますか?
配列内のすべての値をデフォルトで false にしたい。

4

4 に答える 4

4

要素が に設定されていることを保証したい場合falseは、型の式が必要です

new T[N]();

この場合、

someBoolArray = boost::shared_ptr<bool[]>(new bool[someValue]()); 
//                                                           ^^
于 2013-06-30T11:58:30.390 に答える
1

C++11 を使用していない場合は、オブジェクトの配列を割り当てるときに既定のコンストラクターしか使用できないため、配列をそのコンストラクターで配列をクリアするクラスに置き換える必要がありますbool。このクラスには、bool*and への型キャスト演算子とbool*オーバーロードが含まconst bool*れている必要がありますoperator []

または、構築時に配列をクリアすることをあきらめてfor、行の直後にループを追加してクリアすることもできますsomeBoolArray = ...。どちらのアプローチでも、コンパイルされたコードは同じになります。

ところで、既定のコンストラクター以外のコンストラクターでオブジェクトの配列を作成できないことは、C++11 で対処された言語の欠陥でした。

于 2013-06-30T12:10:25.790 に答える
1

C++11 では、初期化子を配列に渡すことができます。

new bool[someValue] {false}

フォームの代わりに make_shared を使用することをお勧めします。

于 2013-06-30T12:01:42.613 に答える