2 つの値を返したいのですが、そのうちの 1 つは新しいオブジェクトです。私はこれを使用してこれを行うことができます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
他のタイプのようにうまく構成できないことを意味します (もう 1 つの点で)。この場合、新しいオブジェクトを返す良い方法は何ですか?
1 つの選択肢は a を返すことでshared_ptr
あり、もう 1 つは 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_;
};
より良い方法はありますか?