I want to return two values, one of which is a new object. I can do this using std::pair
:
class A {
//...
};
std::pair<A*, int> getA()
{
A* a = new A;
//...
}
To make the code exception-safe, I would like to do:
std::pair<std::auto_ptr<A>, int> getA()
{
std::auto_ptr<A> a(new A);
//...
}
But this won't compile as the auto_ptr
cannot be copied without modifying the auto_ptr
being copied. Ok, this means auto_ptr
does not compose well like other types (in one more way). What is a good way of returning a new object in this case?
One alternative is to return a shared_ptr
and another is an inout reference. But I am looking for some other alternative. I can do something like:
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_;
};
Is there a better way?
You can return only one value in Java. If needed you can return multiple values using array or an object.
Your answerNo, you don't have two return types.
To return multiple values from a function, you can pack the return values as elements of an array or as properties of an object.
There are two major ways to handle this problem:
shared_ptr
.auto_ptr
doesn't really work in these sorts of cases, as you discovered, but the new standard and Boost both contain reference-counted pointers that do what you want. Let us know what you don't like about shared_ptr
, and maybe we can suggest an alternative.
A shared_ptr
would be ideal in that situation, but if you really don't want to use those you could return an auto_ptr
to a pair containing the object and the int instead.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With