Как использовать make_shared для создания массива объектов одного типа?

Мы могли бы использовать "make_shared" для создания объекта быстрее и безопаснее по сравнению с использованием "new". Например,

shared_ptr<Dog> p = make_shared<Dog>("Luther"). 

Если мне нужно создать массив объектов (например, Dog[3]), можно ли использовать "make_shared" вместо "new"? Кроме того, возможно ли использовать настраиваемую функцию удаления с методом make_shared?

1 ответ

Решение
auto parr = make_shared<std::array<Dog, 3>>(std::array<Dog, 3>{"Bob", "Charlie", "Alice"});

Если вам нужен общий указатель на n-й элемент...

auto pelem = std::shared_ptr<Dog*>{p, p->data()+n};

который делает 0 распределений.

Другие вопросы по тегам