首页 > 解决方案 > 如何使用 make_shared 创建相同类型的对象数组?

问题描述

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

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

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

标签: c++11shared-ptrmake-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 次分配。


推荐阅读