shared_ptr to an array
shared_ptr to an array
如何动态分配shared_ptr指向的"n个元素"?
我能够创建一个共享指针将指向的静态数组,但我希望用户输入一个数字,然后分配 n 个元素。
shared_ptr<int[10]> p = make_shared<int[10]>();
你应该像这样创建shared_ptr
std::shared_ptr<int> sp( new int[10], std::default_delete<int[]>() );
您必须将其他删除程序提供给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>()));
如何获取特定元素? 诸如此类
std::shared_ptr<int> sp(new int[10], std::default_delete<int[]>());
sp.get()[0] = 5;
std::cout << sp.get()[0] << std::endl;
该语言目前缺乏使用make_shared
来实现此目的的能力。它在P0674中得到解决。很确定它会进入语言,尽管它不会是C++11。
措辞将允许你说
auto p = std::make_shared<int[10]>()
或
auto p = std::make_shared<int[]>(10)
直到C++20(或每当提案正式标准化时),您都坚持使用21koizyd答案中链接的new
语法。
我认为这个问题更好的是unique_ptr模板。
int amount = 10;
std::unique_ptr<int[]> name(new int[amount]);
我发现下面的表格是错误的。
std::shared_ptr<std::array<int,6>> ptr(std::make_shared<std::array<int, 6>>(std::array<int, 6>()));
它调用两次析构函数。
如果您的输入不是本机类型(如 int),则会导致崩溃。
可以试试。
std::shared_ptr<std::array<int,6>> ptr(std::make_shared<std::array<int, 6>>());
也许上面的说法是正确的?
有谁知道为什么它会调用两次析构函数?
有什么想法吗?
相关文章:
- C++11 中不同类型的对象的 std::array 的替代方案
- constexpr begin of a std::array
- C++如果必须在编译时确定大小,std::array 有什么意义?
- OpenGL VBO Indexing ( How to compute Index Array)
- 标准::unordered_map 中的 std::array 的值初始化
- "Warning: Comma within array index expression"但逗号分隔函数参数
- Divide et impera sum of the elements of an array bug
- shared_ptr to an array
- "error: subscripted value is not an array, pointer, or vector",我正在使用字符串
- 当您声明"pointer type"形式(函数)参数"like an const array"时,什么是常量?
- 使用多个文件时"array bound is not an integer constant before ']' token"
- C语言中有没有类似'minimizing stack overflow of an array'的东西?
- DsGetDomainControllerInfo 返回一个"Pointer to a pointer variable that receives an array" ?我不明白
- 为什么我会得到"cannot allocate an array of constant size 0"?
- 使用枚举类值为数组编制索引时出现"Array subscript is not an integer"错误
- std::vector of an array
- 获取错误"array bound is not an integer constant before ']' token"
- 如何使类型别名"a pointer to an array of const int"?
- 在运行时创建结构时"array bound is not an integer constant"
- 刽子手游戏 - 同时循环与条件"contained in an array"