首页 > 解决方案 > 我如何处理 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 的 ++ 运算符。

标签: c++pointersc++17shared-ptr

解决方案


Astd::shared_ptr包含两部分:

  1. 指向簿记的指针。
  2. 一个有效载荷指针,它应该至少有效。

因此,对于您的指针算术,只需分别使用依赖shared_ptr 设置

shared_ptr<int[]> foo(a, a.get() + 1);

顺便说一句,数组shared_ptr支持索引,因此无需.get()为此进行讨论。

此外,只要您保持shared_ptr数据活跃,使用原始指针和引用进行处理就没有错(实际上,这是预期的并且更有效)。


推荐阅读