Функции make_shared и emplace

Я пытался найти простой способ поместить элементы в 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.

Ответы

Ответ 1

Вы можете позволить создать конструкцию перемещения на месте:

vec.emplace_back(std::make_shared<int>(42));