考虑以下代码段:
以下程序的输出结果为:
我对以上代码的唯一解释是,由于
我的问题是:我这样想是正确的吗?还是以上情况是未定义行为,可能因编译器而异?
#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;
}
以下程序的输出结果为:
a constructed
b constructed
b destructed
a destructed
我对以上代码的唯一解释是,由于
a
之后创建了b
,因此b
应该在栈中存储在a
之上。现在当主函数完成时,b
先被弹出,然后是a
,因此它的析构函数先被调用,然后是a
的析构函数。我的问题是:我这样想是正确的吗?还是以上情况是未定义行为,可能因编译器而异?