Как использовать 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 распределений.