c ++如果被叫方删除了来电者会怎么样?

时间:2011-02-27 02:32:26

标签: c++

是在被调用者函数删除定义了调用者(成员)函数的对象时定义的c ++应用程序中的行为吗?其余的调用者函数体仍然会被执行吗?如果它不访问任何成员变量,它会正确运行吗?

我只是问,因为我在我的应用程序中找到了这个案例(一些玩弄成员函数指针的结果),我很惊讶为什么它不会让我的应用程序崩溃。

3 个答案:

答案 0 :(得分:5)

是的,这是预期的行为。只要代码不访问任何非静态成员对象或函数,就没有理由不能继续运行。

答案 1 :(得分:1)

“是的其余调用者将运行”的一个值得注意的例外是Win32的FreeLibraryAndExitThread,它真的删除了调用者,堆栈空间,代码等等。

答案 2 :(得分:-3)

即使调用了析构函数,代码仍然在堆栈中。但是,你不能依赖于同时不会覆盖任何空闲内存的事实。但是,如果它没有被覆盖,并且析构函数不会覆盖任何关键的东西,那么事情就会顺利进行。