2014-01-15 89 views
1

這是內存泄漏?應該美孚()是一個默認的構造函數的類主要完成後C++內存泄漏?

int main() 
{ 

    Foo * p = new Foo(); 

    return 0; 
} 

我想是因爲該應用程序儘快結束爲主要目的,並推測操作系統釋放所有它不是泄漏一旦完成,該應用程序的資源。這個假設是否正確?

+3

是的,這對大多數操作系統都是正確的。 – Duck

+1

'Foo p;'有什麼問題?然後,當您離開示波器時,該對象會自動銷燬。 – Brandin

回答

5

是的,在您的程序中,它是一個泄漏。您沒有取消分配您的Foo

無論如何,你的操作系統是否會回收進程的內存?也許,也許不是。 Windows肯定會重新使用內存。

但是,如果您只想爲您的系統和系統提供通用超實用的答案,那麼您可能會逃避這一點。

但是,在任何情況下,間接資源都不會被您的操作系統神奇地釋放。 Foo的析構函數可能涉及多於內存解除分配

如果你想有一個C++的答案,或者是一個有可取之處的代碼的完整性方面,智能化設計(笑)坦率地說只是良好的生活習慣,沒有。當有人要求堅實的實際理由,他們必須找到原因delete,當被迫提供例如文件句柄,網絡連接和工作者線程的例子時,很難證明它是合理的。但基本的常識意味着,所有這些問題都是自動處理的,,而不必單獨命名每個人,當你花費5秒的時間來摧毀你的物品,當你完成它們。

只是delete而已。你沒有理由不這樣做。

+0

詳細說明「只要Foo的析構函數沒有更多的資源來釋放」 – BWG

+1

@BWG:'struct Foo {char * ptr; int fd,fd2; Foo():ptr(new char [50000000]),fd(open(「/ tmp/moronic」,O_CREATE | O_APPEND)),fd2(someTcpConnectionFunction(「google.com」,80)){}; }; int main(){new Foo(); } // WHOOPS' –

+0

等等...操作系統是否還釋放字符? – BWG