Ответ 1
Вы можете использовать reset
для этого:
bar.reset(new int());
Это будет delete
текущее содержимое (если оно есть) и установите внутренний указатель на значение, возвращаемое выражением new
.
У меня есть класс 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
, но ни один из них не кажется правильным.
Вы можете использовать reset
для этого:
bar.reset(new int());
Это будет delete
текущее содержимое (если оно есть) и установите внутренний указатель на значение, возвращаемое выражением new
.
bar = std::make_shared<int>();
является одним из способов, особенно если вы хотите сохранить удобочитаемость оператора присваивания.