C优化器删除具有副作用的对象
作者:互联网
这当前不是问题,但我担心代码是否被移植或我们更改编译器.
我有一个块的代码
{
MyClass myObj;
// copy some other variables but never touch myObj
.
.
} // expect destructor to be called on myObj
其中myObj从未在块代码中使用,但构造函数有副作用,我依赖于MyClass的析构函数代码在块结束时执行.这在我当前的arm编译器上按预期工作,并启用了一些优化.
我的问题是,是否有任何我需要做的事情,比如声明一些易失性或设置一些公共属性以防止优化器将myObj检测为未使用的变量或其他一些.
这不是C 11编译器.正如我所说,这不是一个问题,但我不想为其他人留下一个奇怪的未来错误.
解决方法:
除了明确定义的情况(如RVO (return value optimization))之外,不允许优化更改程序的可观察行为.优化必须遵循所谓的“as-if” rule.
标签:raii,side-effects,c,optimization 来源: https://codeday.me/bug/20190829/1763519.html