我的 C++ 类聚合了一个辅助对象,它可能会在构造函数中抛出异常,但我自己的类不能抛出(我自己的类被一个框架使用,该框架没有为构造函数抛出的异常做好准备)。现在,我通过使用 new
创建对象来延迟 helper 对象的构造,从而降低这种风险,以便我能够捕获任何异常:
struct HelperObject {
HelperObject() {
throw 0;
}
}
struct MyObject {
HelperObject *o;
MyObject() : o( 0 ) {
try {
o = new HelperObject;
} catch ( ... ) {
// ...
}
}
};
然而,为此滥用 new
有点烦人;我突然不得不无缘无故地处理整个代码的指针,除了它允许我更好地控制对象的构造时间。
是否可以在不使用 new
的情况下达到这种效果?
最佳答案
可以使用智能指针和额外的 MakeHelperObject 函数,以便在 HelperObject 域内完成异常。这只会使 MyObject 代码干净,但在 HelperObject 构造期间仍需要处理异常:
struct HelperObject {
HelperObject() {
throw 0;
}
static HelperObject* MakeHelperObject()
{
try
{
HelperObject* p = new HelperObject();
return p;
}
catch(const SomeException& e)
{
// deal with e
}
return NULL;
}
};
struct MyObject {
std::unique_ptr<HelperObject> o;
MyObject() : o(HelperObject::MakeHelperObject())
{
}
};
关于c++ - 如果我自己的构造函数在不求助于 "new"的情况下不能抛出,我该如何减轻聚合对象构造函数的异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14137653/