假设我有一些类Foo
没有定义默认构造函数并且throws
在非默认构造函数中。在初始化该类型的新对象时,我想捕获任何异常并返回,否则继续使用该对象。我注意到,如果可能的话,在堆栈上或通过使用共享指针来初始化这个对象是很困难的,因为我试图避免管理内存。
失败 1
Foo f; // doesn't work, no default constructor
try { f = Foo(...); }
失败 2
try {
Foo f(...)
}
catch(...) {}
// doesn't work, f is inaccessible
失败 3
boost::shared_ptr<Foo> pf;
try { pf = new Foo(...); } // no assignment operator
我必须吗...
Foo *f;
try { f = new Foo(...) } // okay, let's just manage the memory
有办法吗?
编辑
好的,所以这有效,尽管不是最干净的。有没有更“标准”的方式?
boost::shared_ptr<Foo> pf;
try { pf = boost::shared_ptr<Foo>(new Foo(...)); }