Redian新闻
>
程序结束时destructor被call的顺序是什么样的?
avatar
程序结束时destructor被call的顺序是什么样的?# Programming - 葵花宝典
A*c
1
诚心请教, 门牌号码14744,风水是不是不好, 非常感谢!
avatar
s*y
2
最近两个多月来,中国最郁闷的企业应该就是百度了。作为BAT的坚强一角,作为中国市场的搜索服务绝对领头人,百度承受了来自政府和舆论等等各方面的压力,市值蒸发117亿美元,可谓相当痛苦。
百度事件中千夫所指的是“竞价排名”。其实竞价排名是广告业玩了多少年的规则,也没听说出过什么事,也没人指责过,怎么这次突然所有人都揪住这个不放呢?广告位当然是价高者得啊!十多年前我就接到过百度的电话,向我推销竞价排名,说可以让公司的链接出现在搜索结果的前几名。当时我的同事说:排那个干嘛?咱们组织自己人多搜几次,排名不也上去了吗?
没错,这个排名不只是价高者得,还有其他因素在里面,大家只看到“竞价”两个罪恶的字眼,没看到后面的深层问题。
中国有句俗语叫“病急乱投医”。魏则西的家人就是这种心情。在中国,医疗资源被大型公立医院长期占据,就算某个二线三线城市出了名医,大多会被一线城市的大型医院挖走。这些大型公立医院给出的条件是二三线城市给不了的,就算同处一线城市,优秀的医疗资源也高度集中。如果是危及生命的病症,当然会找最好的专家,而最好的专家只有那么几位,就在那么几个医院里,想见一面真的很难。因此看不上病的人只能转向其他途径,而信息不透明给不法医疗机构提供了生存空间。
这事根源在于中国就医难,之所以出在百度身上,是因为中国搜索它最大。在百度的营收构成里,医疗行业的贡献高达50%,过高的利益驱使百度不顾一切的追逐。谁都知道在中国母婴、教育和医疗保健是三大暴利行业,百度只是做了一次问题的载体。当然,按照百度处理商业利润和信息质量的方法,就算没有魏则西,早晚也会有则南、则北。百度的原罪不是提供竞价排名,而是对待自身产品的草率。
avatar
mw
3
比如说
main(){
class a;
class b;
..
..
..
}
最后结束了,a和b哪个的destructor先被叫?
avatar
p*9
4
这个跟风水无关。你这属于靠号码来占卜房屋吉凶。
avatar
i*h
5
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?)
avatar
d*q
6
reverse order...it actually like operation in stack.
first in last out.
avatar
x*u
7
最好不要依赖这个顺序。如果你希望控制顺序,应该用{}才是正道。

【在 mw 的大作中提到】
: 比如说
: main(){
: class a;
: class b;
: ..
: ..
: ..
: }
: 最后结束了,a和b哪个的destructor先被叫?

avatar
n*g
8
writing test才是王道。
avatar
i*h
9
怎么用{}?

【在 x****u 的大作中提到】
: 最好不要依赖这个顺序。如果你希望控制顺序,应该用{}才是正道。
avatar
p*o
10
{
A a;
{
B b;
}
}

【在 i***h 的大作中提到】
: 怎么用{}?
avatar
i*h
11
有规定这个不会被优化成
{
{
B b;
}
A a;
}
么?

【在 p***o 的大作中提到】
: {
: A a;
: {
: B b;
: }
: }

avatar
t*t
12
这个顺序当然可以依赖, 离开scope的时候, destructor的顺序总是和constructor相反
的.

【在 x****u 的大作中提到】
: 最好不要依赖这个顺序。如果你希望控制顺序,应该用{}才是正道。
avatar
i*h
13
编译时有可能改变程序行次序么?
A a;
B b;
能保证 a 在 b 前么?
Thanks

【在 t****t 的大作中提到】
: 这个顺序当然可以依赖, 离开scope的时候, destructor的顺序总是和constructor相反
: 的.

avatar
t*t
14
能保证a在b前.

【在 i***h 的大作中提到】
: 编译时有可能改变程序行次序么?
: A a;
: B b;
: 能保证 a 在 b 前么?
: Thanks

avatar
T*9
15
有时候循环展开就是利用这个,呵呵

【在 t****t 的大作中提到】
: 能保证a在b前.
avatar
i*h
16
展开说说?

【在 T*****9 的大作中提到】
: 有时候循环展开就是利用这个,呵呵
avatar
z*k
17
楼主的示例似乎有错,是不是想说这样:
class a
{
...
};
class b
{
...
};
main(){
a a1;
b b1;
..
..
..
}
那么在main函数的"}"处,b1的destructor先被调用,然后再调a1的析构函数.
avatar
x*u
18
这个一定不会,应该是语法定义。在WTL的sample里面就有这么写的。

【在 i***h 的大作中提到】
: 有规定这个不会被优化成
: {
: {
: B b;
: }
: A a;
: }
: 么?

avatar
p*o
19
对呀。现在的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相反
: 的.

avatar
p*o
20
这也就是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_) {}

avatar
t*t
21
initializer-list执行的顺序是严格按照成员声明的顺序, 而不是initializer-list的
顺序.

【在 p***o 的大作中提到】
: 这也就是gcc下面的一个warning而已把。
avatar
p*o
22
哦,这是当然,我以为他说那么写会报错。

【在 t****t 的大作中提到】
: initializer-list执行的顺序是严格按照成员声明的顺序, 而不是initializer-list的
: 顺序.

相关阅读
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。