配列メンバを持つ構造体を持っていて、構造体のコンストラクタの配列のデフォルトのコンストラクタを明示的に呼び出すと、要素はデフォルトで構築されますか? (整数配列の場合は、ゼロ初期化を意味します)。デフォルトでは、整数配列を構築してゼロ初期化を行いますか?
struct S
{
S() : array() {}
int array[SIZE];
};
...
S s;
// is s.array zero-initialized?
GCCとの簡単なテストは、これが事実であることを示唆しているが、私は、この動作に頼ることができることを確認したかったです。
(。私は明示的にデフォルト・構築していない場合は構造体のコンストラクタで配列を、配列要素がランダムな値を持っていることに気づいた)
あなたは 'std :: vector'を使用していない特別な理由はありますか? – AJG85
@ AJG85:はい。これらの構造の100000の配列を割り当てる場合、100000 * sizeof(int *)バイトとSIZEバイトの100000割り当ての1つの割り当てではなく、100000 * SIZEバイトの単一割り当てが行われるようにしたいと思います。 (一方で、 'boost :: array'(またはC++ 0xで' std :: array')を使うことで、もう少しC++ - yになります)。 – HighCommander4
@High: 'std :: vector'の精神モデルは完全に間違っています。フリーストアのオーバーヘッドに約12バイトの一定のオーバーヘッドを加えたオーバーヘッドがあります。 –
fredoverflow