あなたはマイヤーの本のどのページを引用していませんが、私はティモ・ガウスそのコンストラクタを参照しているように聞こえ、継承に従ってデストラクタが呼び出されます。
オブジェクトインスタンスの配列の場合、オブジェクトが破棄される順序は構築順序の逆です。次のコードに示すように、これは簡単に確認できます。クラス変数は作成されたインスタンスの総数を追跡し、各オブジェクトのデータメンバーは自身の数を追跡します。コンストラクタとデストラクタはメッセージを出力するので、実行すると何が起こるかを正確に見ることができます。
テストコードは、構築時にオブジェクトの数を0から9まで、次にインスタンスを破棄するときに9から0にオブジェクトの数を出力します。 (しばしばそうであるように)私は、これは実装の詳細ではないことが100%わからないよう
#include <iostream>
class MyClass
{
public:
MyClass()
{
mCounter = kInstanceCount++;
std::cout << "+++ MyClass() " << mCounter << std::endl;
}
~MyClass()
{
std::cout << "--- MyClass() " << mCounter << std::endl;
}
private:
unsigned mCounter;
static unsigned kInstanceCount;
};
unsigned MyClass::kInstanceCount = 0;
int main()
{
MyClass arr[10];
return 0;
}
あなたは、C++標準をチェックする必要があります(これは、Mac OS X上でg++-4.2
でテストされました)この場合、この動作に頼る必要はありません。
また、実際のオブジェクトインスタンスのスタックベースの配列を作成することはあまり一般的ではないことにも注意してください。 std::vector
を使用している可能性が高く、ヒープ割り当てオブジェクトのスマートポインタを使用する可能性があります。
これらはすべてデフォルトのコンストラクタで構築され、構築/破壊の順序はどちらでも構いません。 "引数なしのコンストラクタはグローバル(クラス静的なものなど)にアクセスできるため、結果の配列には、私はあなたが何を意味するのかよく分かりません。どのオーダーでも意味があります.1つのオーダーだけが標準の12.6に準拠しています。インデックス内の別個の素因数の数の逆順で、基数7の桁の合計で決定される結び付き;-) –