И это всё МОЁ

Допустим, надо создавать объект динамически, и потом передавать его в другой объект, чтобы последний уже освобождал этот динамически созданный объект. При этом одновременно динамический объект используется только одним собственником.

Есть два варианта с умными указателями:

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);
}

2)
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));
}

Какой из них лучше?








 ,