Should I assign or reset a unique_ptr?
C++C++11Smart PointersUnique PtrC++ Problem Overview
Given the common situation where the lifespan of an owned object is linked to its owner, I can use a unique pointer one of 2 ways . .
It can be assigned:
class owner
{
std::unique_ptr<someObject> owned;
public:
owner()
{
owned=std::unique_ptr<someObject>(new someObject());
}
};
The reset method can be utilised:
class owner
{
std::unique_ptr<someObject> owned;
public:
owner()
{
owned.reset(new someObject());
}
};
In the interests of best practice, should I prefer one form over the other?
EDIT: Sorry folks. I over simplified this. The heap allocation occurs in an initialise method and not in the ctor. Therefore, I cannot use initialiser lists.
C++ Solutions
Solution 1 - C++
From the docs of unique_ptr
's operator=
:
> Transfers ownership of the object pointed to by r to *this as if by calling reset(r.release())
followed by an assignment from std::forward<E>(r.get_deleter())
.
And all you need of that is the reset
call, so it's simpler to just call it directly
Solution 2 - C++
The proper way to do this (that you didn't list) is to use the constructor of owned
:
owner() : owned(new someObject())
{}
Apart from that I'd prefer reset
as you don't create a useless intermediate instance in that case (even though there might be no difference on the machine level as the optimizer can do a lot there).