考虑以下代码
#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;
}
Run Code Online (Sandbox Code Playgroud)
以下程序的O/P出现:
a constructed
b constructed
b destructed
a destructed
Run Code Online (Sandbox Code Playgroud)
我对上面代码的唯一解释是,自从b创建之后a,它应该存储a在堆栈的上方.现在,当主要完成时,b首先被突然出现,然后a它的析构函数首先被调用然后被调用a.
我的问题是:我是否正确地思考或上述是未定义的行为,并且可能因编译器而异?
Luc*_*ore 11
它没有变化,自动存储器(堆栈)中的对象按照创建它们的相反顺序被破坏.它完全由标准规定.
C++ 03 15.2.构造函数和析构函数
- [...]自动对象以完成构造的相反顺序销毁.