我想返回两个值,其中一个是一个新对象。我可以这样做std::pair
:
class A {
//...
};
std::pair<A*, int> getA()
{
A* a = new A;
//...
}
为了使代码异常安全,我想做:
std::pair<std::auto_ptr<A>, int> getA()
{
std::auto_ptr<A> a(new A);
//...
}
但这不会编译,因为如果auto_ptr
不修改auto_ptr
被复制的内容就无法复制。好的,这意味着auto_ptr
不像其他类型那样组合得很好(以另一种方式)。在这种情况下返回新对象的好方法是什么?
一种选择是返回 a shared_ptr
,另一种是 inout 引用。但我正在寻找其他选择。我可以做类似的事情:
class AGetter
{
void getAExecute()
{
//...
// set a_ and i_
}
std::auto_ptr<A> getA() const
{
return a_.release();
}
int getInt() const
{
return i_;
}
private:
std::auto_ptr<A> a_;
int i_;
};
有没有更好的办法?