Допустим, надо создавать объект динамически, и потом передавать его в другой объект, чтобы последний уже освобождал этот динамически созданный объект. При этом одновременно динамический объект используется только одним собственником.
Есть два варианта с умными указателями:
1)
struct User
{
...
void set(std::shared_ptr<Dynamic> d)
{
mD = d;
}
std::shared_ptr<Dynamic> mD;
...
};
void setDynamic(User& u)
{
auto dynamic = std::make_shared<Dynamic>();
...
u.set(dynamic);
}
struct User
{
...
void set(std::unique_ptr<Dynamic>&& d)
{
mD = d;
}
std::unique_ptr<Dynamic> mD;
...
};
void setDynamic(User& u)
{
auto dynamic = std::make_unique<Dynamic>();
...
u.set(std::move(dynamic));
}
Какой из них лучше?