哦,C++大师,我在寻求你的智慧。对我说标准的话,告诉我C++是否保证下面的程序:
#include <iostream>
using namespace std;
struct A
{
A() { cout << "A::A" << endl; }
~A() { cout << "A::~" << endl; }
};
struct B
{
B() { cout << "B::B" << endl; }
~B() { cout << "B::~" << endl; }
};
struct C
{
C() { cout << "C::C" << endl; }
~C() { cout << "C::~" << endl; }
};
struct Aggregate
{
A a;
B b;
C c;
};
int main()
{
Aggregate a;
return 0;
}
总是会产生
A::A
B::B
C::C
C::~
B::~
A::~
换句话说,是否保证成员按声明的顺序初始化,并以相反的顺序销毁?
发布于 2010-02-13 02:47:43
是的,它们是(即非静态成员)。初始化(构造)见12.6.2/5,销毁见12.4/6。
发布于 2010-02-13 03:04:11
是的,标准保证对象以与创建对象相反的顺序被销毁。原因是一个对象可以使用另一个对象,因此依赖于它。考虑一下:
struct A { };
struct B {
A &a;
B(A& a) : a(a) { }
};
int main() {
A a;
B b(a);
}
如果a
在b
之前进行析构,那么b
将持有无效的成员引用。通过以与创建对象相反的顺序析构对象,我们可以保证正确的析构。
发布于 2010-02-13 02:47:24
是的,是的。对于成员变量,销毁的顺序总是与构造的顺序相反。
https://stackoverflow.com/questions/2254263
复制相似问题