Присвоение переменной-члену std:: shared_ptr

У меня есть класс foo, с элементом bar типа std::shared_ptr<int>:

class foo
{
    std::shared_ptr<int> bar;
    /*other stuff here*/
};

В этом классе я хочу назначить new int bar. Но я не могу написать bar = new int();, поскольку указатель не имеет оператора публичного присваивания.

Как мне это сделать? Я мог бы std::move или std::swap, но ни один из них не кажется правильным.

Ответ 1

Вы можете использовать reset для этого:

bar.reset(new int());

Это будет delete текущее содержимое (если оно есть) и установите внутренний указатель на значение, возвращаемое выражением new.

Ответ 2

bar = std::make_shared<int>(); является одним из способов, особенно если вы хотите сохранить удобочитаемость оператора присваивания.