mw 发帖数: 525 | 1 比如说
main(){
class a;
class b;
..
..
..
}
最后结束了,a和b哪个的destructor先被叫? |
i***h 发帖数: 12655 | 2 should be the reverse order, I think
I am not sure if A is always constructed before B, though. (Can compiler
optimization change the order in the code above?) |
d***q 发帖数: 1119 | 3 reverse order...it actually like operation in stack.
first in last out. |
x****u 发帖数: 44466 | 4 最好不要依赖这个顺序。如果你希望控制顺序,应该用{}才是正道。
【在 mw 的大作中提到】 : 比如说 : main(){ : class a; : class b; : .. : .. : .. : } : 最后结束了,a和b哪个的destructor先被叫?
|
n****g 发帖数: 150 | |
i***h 发帖数: 12655 | 6 怎么用{}?
【在 x****u 的大作中提到】 : 最好不要依赖这个顺序。如果你希望控制顺序,应该用{}才是正道。
|
p***o 发帖数: 1252 | 7 {
A a;
{
B b;
}
}
【在 i***h 的大作中提到】 : 怎么用{}?
|
i***h 发帖数: 12655 | 8 有规定这个不会被优化成
{
{
B b;
}
A a;
}
么?
【在 p***o 的大作中提到】 : { : A a; : { : B b; : } : }
|
t****t 发帖数: 6806 | 9 这个顺序当然可以依赖, 离开scope的时候, destructor的顺序总是和constructor相反
的.
【在 x****u 的大作中提到】 : 最好不要依赖这个顺序。如果你希望控制顺序,应该用{}才是正道。
|
i***h 发帖数: 12655 | 10 编译时有可能改变程序行次序么?
A a;
B b;
能保证 a 在 b 前么?
Thanks
【在 t****t 的大作中提到】 : 这个顺序当然可以依赖, 离开scope的时候, destructor的顺序总是和constructor相反 : 的.
|
|
|
t****t 发帖数: 6806 | 11 能保证a在b前.
【在 i***h 的大作中提到】 : 编译时有可能改变程序行次序么? : A a; : B b; : 能保证 a 在 b 前么? : Thanks
|
T*****9 发帖数: 2484 | 12 有时候循环展开就是利用这个,呵呵
【在 t****t 的大作中提到】 : 能保证a在b前.
|
i***h 发帖数: 12655 | 13 展开说说?
【在 T*****9 的大作中提到】 : 有时候循环展开就是利用这个,呵呵
|
z**k 发帖数: 629 | 14 楼主的示例似乎有错,是不是想说这样:
class a
{
...
};
class b
{
...
};
main(){
a a1;
b b1;
..
..
..
}
那么在main函数的"}"处,b1的destructor先被调用,然后再调a1的析构函数. |
x****u 发帖数: 44466 | 15 这个一定不会,应该是语法定义。在WTL的sample里面就有这么写的。
【在 i***h 的大作中提到】 : 有规定这个不会被优化成 : { : { : B b; : } : A a; : } : 么?
|
p****o 发帖数: 1340 | 16 对呀。现在的compiler很严格,比如说
class A
{
public:
A(double a, int b);
double a_;
int b_;
};
A::A(double a, int b) : b(b_), a(a_) {}
【在 t****t 的大作中提到】 : 这个顺序当然可以依赖, 离开scope的时候, destructor的顺序总是和constructor相反 : 的.
|
p***o 发帖数: 1252 | 17 这也就是gcc下面的一个warning而已把。
【在 p****o 的大作中提到】 : 对呀。现在的compiler很严格,比如说 : class A : { : public: : A(double a, int b); : double a_; : int b_; : }; : A::A(double a, int b) : b(b_), a(a_) {}
|
t****t 发帖数: 6806 | 18 initializer-list执行的顺序是严格按照成员声明的顺序, 而不是initializer-list的
顺序.
【在 p***o 的大作中提到】 : 这也就是gcc下面的一个warning而已把。
|
p***o 发帖数: 1252 | 19 哦,这是当然,我以为他说那么写会报错。
【在 t****t 的大作中提到】 : initializer-list执行的顺序是严格按照成员声明的顺序, 而不是initializer-list的 : 顺序.
|