【发布时间】:2010-04-14 01:11:47
【问题描述】:
假设MyClass 使用默认析构函数(或不使用析构函数),那么这段代码:
MyClass *buffer = new MyClass[i];
// Construct N objects using placement new
for(size_t i = 0; i < N; i++){
buffer[i].~MyClass();
}
delete[] buffer;
是否有任何优化器能够消除此循环?
另外,我的代码有什么方法可以检测MyClass 是否使用空/默认构造函数?
编辑:对不起我可怕的代码。我认为现在这是正确的..
【问题讨论】:
-
“析构函数”,而不是“解构函数”。附言我从未听说过会删除包含函数调用的循环的优化器。
-
我认为大多数优化器会删除没有副作用的代码。
-
~buffer[i];只执行 1 的补码,然后将结果丢弃。 -
@Mike DeSimone:像这样的激进优化器几十年前就开始搞乱基准程序。不幸的是,我没有想出一个日期,但我确定我是把它作为 1980 年左右的历史事件来阅读的。
标签: c++ optimization g++