またはperson
であると仮定して、 のデフォルト コンストラクタを記述するだけです。各配列要素を自動的に初期化するために呼び出されます。struct
class
一般に、おそらく代わりに使用することを好むはずstd::vector<person>
ですが、確かに言うのに十分なコンテキストが与えられていません.
デフォルトのコンストラクタは次のようになります (これstd::string
には独自のデフォルト コンストラクタがあるため、何もする必要はありません)。
struct person {
std::string name;
int value;
person() : value(0) {}
};
今これ:
person a[5];
それ以上の努力なしで適切に初期化されます。
とにかく後で要素を「適切に」初期化することを計画している場合は、ベクターを使用すると、無駄なダミーの初期化を簡単にスキップできます。
struct person {
std::string name;
int value;
person() : value(0) {}
person(std::string const &n, int v) : name(n), value(v) {}
};
std::vector<person> people;
people.reserve(5);
// just create each person with the right values in the first place:
for (int i = 0; i < 5; ++i) {
people.push_back(person(get_name(i), get_value(i)));
}
最後に、初期化されていないメモリがあっても構わない場合は、最初のバージョン (コンストラクターもループもなし) で問題ありません。ただし、どの要素/メンバーが有効でどれがガベージかを見失うことは、バグの肥沃な原因であることに注意してください。