C++ 优化器删除具有副作用的对象

标签 c++ optimization raii side-effects

目前这不是问题,但如果代码被移植或我们更改编译器,我会担心。

我有一个代码块

{ 
   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/

相关文章:

asp.net - Windows Azure 网站中的 gzip 压缩

gcc - 在 GCC 中编译 : Is -O3 harmful?

unit-testing - RAII 和单元测试原则

c++ - 在 C++ 中实现 "contextmanager"的最佳实践 + 语法

c++ - 使用 Azure C++ SDK 设置元数据

c++ - 析构函数崩溃

c++ - 如果没有析构函数,如何在对象销毁时使用 GDB 中断?

c++ - ‘nullptr’ 之前的预期不合格 ID

python - PuLP CBC 多线程不适用于 COIN_CMD

c++ - 如何创建锁定和解锁互斥锁的智能指针?