目前这不是问题,但如果代码被移植或我们更改编译器,我会担心。
我有一个代码块
{
MyClass myObj;
// copy some other variables but never touch myObj
.
.
} // expect destructor to be called on myObj
其中 myObj 从未在 block 代码中使用,但构造函数有副作用,我依赖于 MyClass 的析构函数代码在 block 结束时执行。这在我当前的 arm 编译器上按预期工作,并启用了一些优化。
我的问题是,是否有任何我需要做的事情,比如声明一些 volatile 或设置一些公共(public)属性以防止优化器将 myObj 检测为未使用的变量等。
这不是 C++11 编译器。正如我所说,这目前不是问题,但我不想给其他人留下一个奇怪的 future 错误。
最佳答案
除了像 RVO (return value optimization) 这样明确定义的情况, 优化不允许改变程序的可观察行为。优化必须遵循所谓的 "as-if" rule .
关于C++ 优化器删除具有副作用的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30536272/