Ответ 1
Вы можете позволить создать конструкцию перемещения на месте:
vec.emplace_back(std::make_shared<int>(42));
Я пытался найти простой способ поместить элементы в std::vector<std::shared_ptr<int>>
, но ничего не мог прийти. std::shared_ptr
принимает указатели в качестве параметров, поэтому я все еще могу написать это:
std::vector<std::shared_ptr<int>> vec;
vec.emplace_back(new int(10));
Однако я не хочу использовать new
вручную, если это возможно, и хотел бы использовать std::make_shared
, если это возможно. Проблема в том, что если я действительно хочу ее использовать, я должен использовать push_back
вместо этого и потерять преимущество встроенной конструкции:
std::vector<std::shared_ptr<int>> vec;
vec.push_back(std::make_shared<int>(10));
Есть ли способ получить преимущества как emplace_back
, так и std::make_shared
? Если нет, есть ли в этом случае рекомендация?
EDIT: Собственно, я задал этот вопрос, но имел несвязанную проблему. Ответ Andy - хороший, и нет никакой реальной проблемы с одновременным использованием функций emplace
и std::make_shared
.
Вы можете позволить создать конструкцию перемещения на месте:
vec.emplace_back(std::make_shared<int>(42));