[英]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(...)
{
//....
}
如果new
或CDevice
的構造函數拋出,則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.