繁体   English   中英

如何移动到智能指针数组中的下一个指针

[英]How to move to the next pointer in a smart pointer array

我一直在试图弄清楚智能指针 arrays 如何与测试程序一起工作,该测试程序旨在一次读取一个文件中的一个字符,并将每个字符存储在所述数组中的一个指针中。 但是,为了设置数组的后续变量,我一直无法增加指针。 虽然没有智能指针,但我可以简单地输入,例如,

char *check = new char[length];
for (int i =0; i < length; i++);{
    *check=='a';
    check++;
}

并且它将允许我为指针数组中的每个指针分配一个值,对智能指针数组执行相同操作会导致“check++”行出现以下错误,

//This is the smart pointer I've been using, for reference;
std::shared_ptr<char> right(new char(length));
error: no 'operator++(int)' declared for postfix '++' [-fpermissive]

暂时,让我们忘记括号表示法不存在(它有效,但我想知道用指针表示法做到这一点的方法),所以我可以以可靠的方式增加或访问未来的指针,以便我可以使用它在诸如循环输入智能指针数组的每个指针中的值之类的事情中。

shared_ptr不支持算术运算。 shared_ptr的目的是管理它所拥有的指针的生命周期。

当您指向一个数组并使用[]运算符时,您将索引到该数组中。

std::shared_ptr<char>是指向一个字符的指针。 当共享指针被销毁时,它将在其指针上调用delete ,而不是delete []

您可以使用std::shared_ptr<char[]> ,然后您可以让该指针保存一个字符数组。

然而,这对这项工作来说是错误的工具(除非您正在使用遗留代码或包装使用指向数组的原始指针的东西)。 您要使用的是std::vector<char> ,它是一个动态数组,所有 memory 管理都被抽象掉了。

这就是你在循环中使用它的方式,不确定为什么你不想使用括号符号,因为这是这里工作的工具。

#include <memory>
#include <iostream>

int main() {
    std::unique_ptr<char[]> ptr(new char[10]);

    for (int i=0; i<10; ++i)
        ptr[i]='a'+i;

    for (int i=0; i<10; ++i)
        std::cout << ptr[i] << ' ';
}

更好的选择 IMO 是改为使用std::vector<char> ptr(10);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM