Log*_*orn 5 c++ optimization allocation volatile destruction
如果我有这个代码:
class A { ... };
class B { ... };
void dummy()
{
A a(...);
B b(...);
...
}
Run Code Online (Sandbox Code Playgroud)
我知道,变量a
和b
将在反向分配顺序(被破坏b
将首先被破坏,则a
); 但我可以肯定的是,优化器将永不掉的分配和建设a
和b
?或者我必须volatile
用来执行它?
唯一的保证是任何可观察到的副作用(即,读取和写入volatile
的建设的目标和要求,以I/O功能)a
之前建设的任何可观察到的副作用会发生b
,以及任何副作用a
需要通过b
意志在他们需要之前发生.
很难想象为什么你需要比这更严格的排序,但是在初始化任何部分之前使对象volatile
确保a
完全初始化b
,尽管构造函数中的一些代码在a
完成之前仍然可能发生.