簡體   English   中英

智能指針-如果構造函數拋出該怎么辦?

[英]smart pointer - what if constructor throws?

我有一個連接到構造函數中的USB設備的類。 如果設備不存在或其他情況失敗,則構造函數將引發異常,並由調用代碼進行處理。

類似於:

CDevice* pDevice = NULL;
try
{
    pDevice = new CDevice();
}

等等。 我想用auto_ptr代替此調用,但不清楚如何在保持對象正確范圍的同時捕獲異常。

首先,我建議您不要使用auto_ptr ,它有些破損,在C ++ 11中已棄用。 最好使用Boost或C ++ 11 SBRM類,例如std::unique_ptr 您無需對示例進行太多修改就可以做到這一點。

std::unique_ptr<CDevice> pDevice;
try
{
    pDevice.reset(new CDevice());
}
catch(...)
{
    //....
}

如果newCDevice的構造函數拋出,則pDevice將保持為空。 使用auto_ptr並沒有太大區別,只是在給定可用替代方法的情況下不建議這樣做。

std::auto_ptr<CDevice> pDevice;

try
{
    pDevice.reset(new CDevice());

    //pDevice = std::auto_ptr<CDevice>(new CDevice());
    // ^^ historical masochism. 
}
catch(...)
{
    //....
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM