我有一个连接到构造函数中的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(...)
{
//....
}