【发布时间】:2013-08-03 17:38:05
【问题描述】:
int main()
{
myClass obj;
.... /* doing things */
....
delete &obj; /* illegal */
}
让我们假设 myClass 是一个适当的 C++ 类,一切都已就绪。现在,我知道这是非法的,这个程序会在运行时崩溃。第一件事是代码试图删除一个堆栈对象,然后在范围完成后再次删除它。我想知道这个非法操作的内部情况。即删除会发生什么,它会调用析构函数吗?你可能看起来很疯狂,但请帮助我理解。
【问题讨论】:
-
它会可能崩溃,但与未定义行为的情况一样,另一方面,它可能不会崩溃,或者大多数时间但并非总是崩溃,或者甚至导致nasal demons。更重要的是你的问题,真的没有办法告诉这将如何处理,未定义行为的性质在大多数情况下是不可预测的。
-
通过检查非优化构建中生成的代码,不难发现它的实际作用
-
这不是骗子。这里的 OP 不是问它是否安全,他们知道它不安全。
-
@jrok 该线程的答案仍然 100% 适用于这个问题:这是未定义的行为。
标签: c++