次のコードを検討してください
#include<iostream>
#include<string>
class A
{
private:
char name[10];
public:
A() { }
A(const char *str)
{
strcpy(name, str);
std::cout<<name<<" constructed"<<endl;
}
~A()
{
std::cout<<name<<" destructed"<<endl;
}
};
int main()
{
A a("a");
A b("b");
return 0;
}
次のプログラムの O/P は次のようになります。
a constructed
b constructed
b destructed
a destructed
上記のコードについて私が持っている唯一の説明は、が のb
後に作成されたため、スタックのa
上に格納する必要があるということです。a
メインが終了すると、b
最初に がポップアウトされ、次に がポップアウトされたa
ため、そのデストラクタが最初に呼び出され、次に が呼び出されましa
た。
私の質問は次のとおりです。そう考えるのは正しいですか、それとも上記は未定義の動作であり、コンパイラごとに異なる可能性がありますか?