如何使用make_shared创建相同类型的对象数组?

How to use make_shared to create an array of objects of the same type?

与使用 "new" 相比,我们可以使用 "make_shared" 更快更安全地创建对象。例如,

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

如果我需要创建对象数组(例如 Dog[3]),是否可以使用 "make_shared" 而不是 "new"?另外,是否可以通过make_shared方法使用自定义删除功能?

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 次分配。