一般规则,只有在免费商店中分配的对象可能导致内存泄漏。 但是在堆栈中创建的对象没有。这是否被认为是内存泄漏?
这里是我的疑问,
int main()
{
myclass x;
...
throw;
...
}
如果抛不处理,它调用,终止(),这反过来又调用abort()和崩溃的应用程序。此时,堆栈中的对象不会被删除(析构函数未被调用)。
我的理解是“当应用程序终止时(通过中止或正常退出),它释放为应用程序分配的所有内存”。因此这不能被视为内存泄漏。
我正确吗?
我们应该假设一个单线程应用程序? – 2010-08-25 21:01:38
让我们清楚一点,'throw;'在你的代码中相当于'terminate()',因为你试图重新抛出一个没有重新抛出的异常。无论是否展开堆栈,它都是实现定义的。如果你抛出* something *,所有自动变量都必须调用它的析构函数。这就是SBRM(RAII)背后的全部想法。 – GManNickG 2010-08-25 21:03:45
jdv,是的,它是一个单线程应用程序。 – user373215 2010-08-25 21:10:09