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)
{
// ...
}
}
使用'unique_ptr'。永遠不要考慮刪除內存或再次泄漏。 – David
@Dave:使用'unique_ptr'是不夠的 - 'foo(unique_ptr(new bar()),unique_ptr(new bar()))';仍然可以泄漏。你需要'make_unique' /'make_shared'。 –
@JoeGauterin:謹慎地詳細說明如何泄漏?編輯:啊,我想我現在看到它,新的酒吧()被稱爲,然後另一個新酒吧()之前unique_ptr被建立爲其他酒吧,但這一個拋出一個異常,離開前一個泄漏。 – johndoe