目前这不是问题,但我担心代码是否被移植或我们更改编译器。
我有一个块的代码
{
MyClass myObj;
// copy some other variables but never touch myObj
.
.
} // expect destructor to be called on myObj
其中myObj从未在块代码中使用,但构造函数有副作用,我依赖于MyClass的析构函数代码在块结束时执行。这在我当前的arm编译器上按预期工作,并启用了一些优化。
我的问题是,我是否需要做任何事情,例如声明易失性或设置一些公共属性以防止优化器将myObj检测为未使用的变量或其他类似物。
这不是C ++ 11编译器。正如我所说,这不是一个问题,但我不想为其他人留下一个奇怪的未来错误。
答案 0 :(得分:3)
除明确定义的案例如RVO (return value optimization)外,不允许优化更改程序的可观察行为。优化必须遵循所谓的"as-if" rule。
答案 1 :(得分:2)
只要你使用的编译器甚至略微符合标准(我正在看你的Turbo C ++)。这不是问题,因为该标准对建筑和破坏提供了有力的保证。这些保证是RAII的基础,{{3}}是"现代"的基础。 c ++风格。