以下两个函数中MyObject
的销毁方式有何不同?
void myFunc1(){
MyObject obj;
// do something with the object
}
void myFunc2(){
{
MyObject obj;
// do something with the object
}
// do some irrelevant random stuff that is not taken out by the compiler, for example
std::string test = "test";
test.append("blah");
}
MyObject
的(虚拟)析构函数类似于
MyObject::~MyObject()
{
revert();
}
其中revert
是公共(非虚拟)成员函数。
我问,因为我注意到,当使用myFunc1
运行Release版本时,似乎在销毁时不会调用revert
方法(当它处于调试模式时)。我可以看到,因为该方法应该改变我可以从代码中的其他地方访问的指针的值。 myFunc2
也不会发生同样的问题。
在这两种情况下,我都使用了xll构建并从Excel中调用了函数。
编辑:
revert
方法调用嵌套类中定义的成员对象的revert
方法,这只是
NestedObject::revert()
{
*myPtr = myBackup;
}
似乎没有被调用。但是,如果我添加一行像
NestedObject::revert()
{
OutputDebugString("test");
*myPtr = myBackup;
}
然后一切正常。所以我的印象是这与编译器的优化有关。