-1

我在一次採訪中被問到:
「在C++的內存管理方面,說明這段代碼有什麼問題?」C++內存管理。這段代碼有什麼問題?

int main(){ 
     for(int i = 0; i<10; i++){ 
     Foo foo = new Foo(); 
     delete foo; } 
     } 



class Foo{ 

    foo(){ 
     string x = new string; 
     } 
    } 

我是C++和OOP的新手,所以我有點卡住了。幫幫我?

+0

我低估了,因爲我覺得這個問題缺乏兩個重要的信息:一個正確的[MCVE](http://stackoverflow.com/help/mcve)(你的代碼不能編譯)和一個**特定的問題* *。你有這個代碼的特定問題嗎?你是否在泄漏記憶並不確定原因?你是否好奇爲什麼刪除'Foo'不會清除它分配的所有內存?您是否閱讀過使用此代碼的網站並向您保證安全?隨着一些[編輯](http://stackoverflow.com/posts/33227066/edit)我覺得這可能會好得多! – Tas

回答

3

它不會爲初學者編譯。在string x = new string;類型不匹配。您正在將字符串*分配給字符串變量。你需要string* x = new string;

另外foo不是Foo的構造函數,因爲情況並不相同,所以您將會丟失返回類型錯誤。

然後,每次構造一個新對象時,都會泄漏一個字符串對象,因爲從未在新對象上調用delete。

1

x未被刪除,因此代碼中存在內存泄漏。