Подтвердить что ты не робот

Должен ли я назначить или reset уникальный_ptr?

Учитывая общую ситуацию, когда срок службы принадлежащего ему объекта связан с его владельцем, я могу использовать уникальный указатель одним из двух способов.,

Он может быть назначен:

class owner
{
    std::unique_ptr<someObject> owned;    
public:
    owner()
    {
        owned=std::unique_ptr<someObject>(new someObject());        
    }
};

Можно использовать метод reset:

class owner
{
    std::unique_ptr<someObject> owned;    
public:
    owner()
    {
        owned.reset(new someObject());
    }
};

В интересах лучшей практики я должен предпочесть одну форму над другой?

РЕДАКТИРОВАТЬ: Извините. Я более упростил это. Распределение кучи происходит в инициализационном методе, а не в ctor. Поэтому я не могу использовать списки инициализаторов.

4b9b3361

Ответ 1

Из документов unique_ptr operator=:

Передает право собственности на объект, на который указывает r, на * это как на вызов reset(r.release()), за которым следует назначение из std::forward<E>(r.get_deleter()).

И все, что вам нужно, это вызов reset, поэтому проще просто вызвать его напрямую

Ответ 2

Правильный способ сделать это (который вы не указали) состоит в использовании конструктора owned:

owner() : owned(new someObject())
{}

Кроме того, я бы предпочел reset, поскольку в этом случае вы не создадите бесполезный промежуточный экземпляр (хотя на уровне машины не может быть никакой разницы, так как оптимизатор может многое сделать).