c++ - 我如何处理 shared_ptr ++
问题描述
int main ()
{
shared_ptr<int[]> a(new int[2]);
a.get()[0] = 5;
a.get()[1] = 10;
int* foo = a.get();
++foo;
cout << *foo << endl;
return 0;
}
正如我所料,输出是“10”。但是我使用了常规指针 (int* foo) 我如何才能实现/使用仅具有 shared_ptr 的 ++ 运算符。
解决方案
Astd::shared_ptr
包含两部分:
- 指向簿记的指针。
- 一个有效载荷指针,它应该至少有效。
因此,对于您的指针算术,只需分别使用依赖shared_ptr
设置:
shared_ptr<int[]> foo(a, a.get() + 1);
顺便说一句,数组shared_ptr
支持索引,因此无需.get()
为此进行讨论。
此外,只要您保持shared_ptr
数据活跃,使用原始指针和引用进行处理就没有错(实际上,这是预期的并且更有效)。
推荐阅读
- gltf - 在 gltf 文件中存储法线的最有效方法?
- flutter - Flutter:检查 GPS 定位模式
- javascript - 如何使用java脚本从canvas.js中的图表js数据显示表格。?
- svg - 无法更改 svg 路径中的笔划宽度
- java - Java 14 Record 文档中“浅不可变”的含义
- maven - 我们可以在同一个 pom.xml 文件中执行多个配置文件吗
- python - 如何创建仅包含一个版本的 python/pip 的 python 虚拟环境?
- python - 404 Flask 部署在 2008R2 - iis7
- python - 即使安装了 slack 和 slackclient 模块,也无法从 slack 导入 WebClient?
- javascript - 动画/滑动侧菜单不向左滑动?