Как использовать make_shared для создания массива объектов одного типа? - PullRequest
0 голосов
/ 30 декабря 2018

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

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

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

1 Ответ

0 голосов
/ 31 декабря 2018
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 выделений.

...