如果我有这个代码:
class A { ... };
class B { ... };
void dummy()
{
A a(...);
B b(...);
...
}
我知道变量a
and b
将以相反的分配顺序销毁(b
将首先被摧毁,然后a
);但我可以确定优化器永远不会交换的分配和构造a
and b
?或者我必须使用volatile
强制执行?
唯一的保证是任何可观察到的副作用(即读取和写入volatile
对象和对 I/O 函数的调用)的构造a
将在构建任何可观察到的副作用之前发生b
,以及任何副作用a
要求由b
将在需要它们之前发生。
很难想象为什么你需要比这更严格的排序,但是制作对象volatile
将确保a
在初始化任何部分之前已完全初始化b
,尽管构造函数中的一些代码仍然可能发生在之前a
做完了。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)