2

我有一个在构造函数中连接到 USB 设备的类。如果设备不存在或其他情况失败,则构造函数会抛出异常,调用代码会处理它。

类似于:

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

等等。我想用一个替换这个调用,auto_ptr但我不清楚如何在保持对象的正确范围的同时捕获异常。

4

1 回答 1

6

首先,我建议您不要使用auto_ptr,它有些损坏并且在 C++11 中已被弃用。更喜欢 Boost 或 C++11 SBRM 类,例如std::unique_ptr. 您可以在不对示例进行太多修改的情况下执行此操作。

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

如果newCDevicethrows 的构造函数,则 pDevice 将保持为空。使用auto_ptr并没有太大的不同,只是考虑到可用的替代品,不推荐使用。

std::auto_ptr<CDevice> pDevice;

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

    //pDevice = std::auto_ptr<CDevice>(new CDevice());
    // ^^ historical masochism. 
}
catch(...)
{
    //....
}
于 2013-04-18T20:07:54.647 回答