考虑以下代码
#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
在堆栈的上方。现在,当 main 完成时,b
首先弹出然后a
,因此它的析构函数首先被调用,然后是 of a
。
我的问题是:我的想法是否正确,或者以上是未定义的行为,并且可能因编译器而异?