Я хочу вернуть два значения, одно из которых является новым объектом. Я могу сделать это, используя 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
не так хорошо сочетаются, как другие типы (еще одним способом). Каков хороший способ возврата нового объекта в этом случае?
Одна из альтернатив - вернуть shared_ptr
, а другая - это ссылка на вход. Но я ищу другую альтернативу. Я могу сделать что-то вроде:
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_;
};
Есть ли лучший способ?