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

C++11 如何使用make_shared创建相同类型的对象数组?,c++11,shared-ptr,make-shared,C++11,Shared Ptr,Make Shared,我们可以使用“make_shared”来创建一个比使用“new”更快、更安全的对象。比如说, shared_ptr<Dog> p = make_shared<Dog>("Luther"). shared\u ptr p=make\u shared(“路德”)。 如果我需要创建一个对象数组(例如Dog[3]),是否可以使用“make_shared”而不是“new”?此外,是否可以使用make_shared方法的自定义删除功能?auto parr=make_shared

我们可以使用“make_shared”来创建一个比使用“new”更快、更安全的对象。比如说,

shared_ptr<Dog> p = make_shared<Dog>("Luther"). 
shared\u ptr p=make\u shared(“路德”)。
如果我需要创建一个对象数组(例如Dog[3]),是否可以使用“make_shared”而不是“new”?此外,是否可以使用make_shared方法的自定义删除功能?

auto parr=make_shared(std::array{“Bob”、“Charlie”、“Alice”});
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};
auto-pelem=std::shared_ptr{p,p->data()+n};
不进行0分配。

如果您不需要共享所有权,
std::vector
可能就足够了。在C++20中,
make_shared
可以与
Dog[]一起使用。我认为通过将对象所有权结构化为具有层次结构的生命周期来消除对共享所有权的需求更难一些