2013-04-18 105 views
3

我在构造函数或类Valuable中有一些有用的代码。我想确保它在submain之前执行。我怎样才能保证它没有被优化出来?C++:避免​​优化变量

int main() 
{ 
    // Dear compiler, please don't optimize ctor call out! 
    Valuable var; 

    return submain(); 
} 

局部变量是否足够?我是否需要使用static

static Valuable *v = new Valuable(); 
delete v; 
v = NULL; 

我能缩短之前的一个班轮:

delete new Valuable(); 
+2

让它变成'volatile'。或者我应该甚至建议..? – 0x499602D2

+3

如果你的构造函数有副作用,那么它将不会被优化,除非它是一个拷贝构造函数,在这里不是这种情况。如果你的构造函数没有副作用,那么你将无法判断它是否被优化了,所以它没有任何区别。 –

+0

你试过挥发? – derpface

回答

12

如果你的构造函数和析构函数有可观察的行为,编译不允许优化它。所以不需要做任何棘手的事情。

+0

如果副作用在析构函数中会怎样?实际上这个第三方类在析构函数中初始化静态互斥锁,这就是为什么它在这里。 – demi

+0

在这种情况下,小心使用“副作用”一词(与“可观察行为”相反)似乎很有用:http://stackoverflow.com/a/8287110/777186 – jogojapan

+1

@demi:不,在这种情况下,编译器也不允许优化对象。编译器必须确保程序的行为与由C++语言标准指定的抽象状态机的行为相同。标准允许构造函数被删除的唯一时间是两个非常特殊的情况,包括复制构造函数(从函数返回非易失性自动对象并复制某些未绑定的临时对象);请参阅C++ 03§12.8/ 15。 –