LINUX.ORG.RU

Передача владения объектом

 ,


0

2

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

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

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

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

★★★★★

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

std::unique_ptr

i-rinat ★★★★★
()
Ответ на: комментарий от i-rinat

Да, я тоже так подумал, но решил перестраховаться и спросить.

seiken ★★★★★
() автор топика
Ответ на: комментарий от Softwayer

Кстати, да. И std::move нужно пo-любому два раза вызывать. Плюс один.

seiken ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.