2013-12-17 38 views
0

我想知道如果一個對象是動態分配的,並且構造函數拋出異常,對象是否仍然需要刪除?構造函數異常和動態分配

class Doom 
{ 
public: 

    Doom() { throw 0; } 

private: 

    int pad; 

}; 

int main() 
{ 
    try 
    { 
     // memory is allocated for Doom but construction fails 
     // is the memory deallocated if construction fails here ? 
     Doom* doom = new Doom(); 
    } 
    catch(int ex) 
    { 
     // ... 
    } 
} 
+0

使用'unique_ptr'。永遠不要考慮刪除內存或再次泄漏。 – David

+0

@Dave:使用'unique_ptr'是不夠的 - 'foo(unique_ptr(new bar()),unique_ptr(new bar()))';仍然可以泄漏。你需要'make_unique' /'make_shared'。 –

+0

@JoeGauterin:謹慎地詳細說明如何泄漏?編輯:啊,我想我現在看到它,新的酒吧()被稱爲,然後另一個新酒吧()之前unique_ptr被建立爲其他酒吧,但這一個拋出一個異常,離開前一個泄漏。 – johndoe

回答

4

不需要刪除,因爲對象從來沒有被構建。編譯器將負責釋放分配的內存。