如何动态分配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)
该语言目前缺乏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链接的语法.
| 归档时间: |
|
| 查看次数: |
7626 次 |
| 最近记录: |