说我有课Foo
它没有定义默认构造函数并且throws
在非默认构造函数中。初始化该类型的新对象时,我想捕获任何异常并返回,否则继续使用该对象。我注意到初始化这个对象(如果可能的话)很困难在堆栈上或通过使用共享指针,因为我试图避免管理内存。
Fail 1
Foo f; // doesn't work, no default constructor
try { f = Foo(...); }
Fail 2
try {
Foo f(...)
}
catch(...) {}
// doesn't work, f is inaccessible
Fail 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
有办法吗?
Edit
好吧,这可行,尽管不是最干净的。有没有更“标准”的方式?
boost::shared_ptr<Foo> pf;
try { pf = boost::shared_ptr<Foo>(new Foo(...)); }
智能指针有一个reset
method:
boost::shared_ptr<Foo> f;
//...
f.reset(new Foo(...));
这解决了您的“失败#3”并允许您做您想做的事。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)