c++优化器移除带有副作用的对象
C++ optimizer removal of object with side effects
这不是目前的问题,但我担心如果代码被移植或我们改变编译器。
我有一个代码块
{
MyClass myObj;
// copy some other variables but never touch myObj
.
.
} // expect destructor to be called on myObj
中myObj从未在块代码中使用,但构造函数有副作用,并且我依赖于MyClass的析构函数代码在块结束时执行。这在我当前的手臂编译器上按预期工作,并打开了一些优化。
我的问题是,是否有任何事情我需要做,像声明一些易变的或设置一些共同属性,以防止优化器检测myObj作为一个未使用的变量或一些这样的。
这不是c++ 11编译器。正如我所说的,这目前不是一个问题,但我不想为其他人留下一个奇怪的未来错误。
除了显式定义的情况,如RVO(返回值优化),优化不允许改变程序的可观察行为。优化必须遵循所谓的"as-if"规则。
只要您使用的编译器甚至略微符合标准(我正在看您的Turbo c++)。这不是问题,因为该标准对建筑和破坏做出了强有力的保证。这些保证是RAII的基础,RAII是"现代"c++风格的基础。
相关文章:
- 什么时候调用组成单元对象的析构函数
- 对RValue对象调用的LValue ref限定成员函数
- CMake-按正确顺序将项目与C运行时对象文件链接
- 空基优化子对象的地址
- 将对象数组的引用传递给函数
- 你能重载对象变量名本身返回的内容吗
- C++使用整数的压缩数组初始化对象
- 找不到成员对象:没有名为get_event()的成员,也处理多态性和向量
- 将对象移动到std::shared_ptr
- 代理对象的常量正确性
- 提升 ASIO 无法识别计时器对象
- 将Ref对象作为类成员
- 将包含C样式数组的对象初始化为成员变量(C++)
- 如果 LTO 中的代码依赖于其构造的副作用,是否允许 LTO 删除未使用的全局对象?
- 返回对象的攻击子具有副作用
- 成员子对象继承存储持续时间是否有任何非直观的副作用
- 为什么不删除具有 C++11 中具有副作用的析构函数未定义行为的对象
- 对象指针的副作用
- 在std::vector对象(不是指针)上调用push_back会产生严重的副作用.所以指针会更好
- c++优化器移除带有副作用的对象