shared_ptr到一个数组

The*_*yer 10 c++ c++11

如何动态分配shared_ptr指向的"n个元素"?

我能够创建一个共享指针指向的静态数组,但我希望用户输入一个数字,然后分配n个元素.

shared_ptr<int[10]> p = make_shared<int[10]>();
Run Code Online (Sandbox Code Playgroud)

21k*_*zyd 20

你应该创建shared_ptr那样的

std::shared_ptr<int> sp( new int[10], std::default_delete<int[]>() );
Run Code Online (Sandbox Code Playgroud)

你必须给其他删除者 shared_ptr

你不能使用std::make_shared,因为该函数只给出了1个参数,对于在数组上创建指针,你也必须创建删除器.

或者您也可以使用(例如在注释中,使用数组或带有向量的,具有自己的删除器)

std::shared_ptr<std::array<int,6>> ptr(std::make_shared<std::array<int, 6>>(std::array<int, 6>()));
Run Code Online (Sandbox Code Playgroud)

如何获得特定元素?像那样

std::shared_ptr<int> sp(new int[10], std::default_delete<int[]>());
sp.get()[0] = 5;
std::cout << sp.get()[0] << std::endl;
Run Code Online (Sandbox Code Playgroud)


And*_*dyG 5

该语言目前缺乏make_shared实现这一目标的能力.它在P0674提到.很确定它会进入语言,虽然它不会是C++ 11.

你可以说措辞

auto p = std::make_shared<int[10]>()
Run Code Online (Sandbox Code Playgroud)

要么

auto p = std::make_shared<int[]>(10)
Run Code Online (Sandbox Code Playgroud)

在C++ 20之前(或者当提案正式标准化时),你仍然坚持使用21koizyd的答案中new链接的语法.