一般規則,只有在免費商店中分配的對象可能導致內存泄漏。 但是在堆棧中創建的對象沒有。這是否被認爲是內存泄漏?
這裏是我的疑問,
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