【发布时间】:2011-01-16 06:59:09
【问题描述】:
哦,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::~
也就是说,成员是否保证按声明顺序初始化并按相反顺序销毁?
【问题讨论】:
-
当类变得庞大而笨重时,这是一个相当常见的细微错误原因。当您有 50 个数据成员,并且其中很多在构造函数初始化器列表中进行了初始化时,很容易假设构造顺序是初始化器列表中的顺序。毕竟,代码编写者已经仔细排序了列表......不是吗?
标签: c++