まず第一に、Jonathonが言ったように、配列がに初期化されるという保証はありません0
。個別に初期化することも、初期化int *x = new int[5]();
を行う方法を使用することもできます。
どれが有効かをどうやって知るのか。最も簡単なアプローチは、sの代わりに構造体を格納することint
です。このようなもの:
struct T {
T() : valid(false), value(0) {
}
bool valid;
int value;
};
T *p = new T[5]; // each element will be initialized to false/0 because T has a constructor.
次に、次のことを実行できます。
p[0].value = 10;
p[0].valid = true;
などなど。
編集:
より高度なオプションとして、演算子のオーバーロードを使用して、次のようにvalid
フラグを自動的に設定できます。
struct T {
T() : valid(false), value(0) {
}
T &operator=(int x) {
valid = true;
value = x;
return *this;
}
bool valid;
int value;
};
T *p = new T[5]; // each element will be initialized to false/0 because T has a
p[1] = 10; // p[1] is now true/10
基本的に、要素に整数値を割り当てると、要素は自動的に有効としてマークされます。この特定の例では、値を「無効」に「設定解除」する方法を示していません。これは、ユースケースやコーディングスタイルにとって意味がある場合とそうでない場合があります。