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

How to move to the next pointer in a smart pointer array

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

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

它允许我为指针数组中的每个指针赋值,对智能指针数组执行相同操作会导致 'check++'、[=13= 行出现以下错误]

//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> 是指向 one 字符的指针。当共享指针被销毁时,它将在它的指针上调用 delete,而不是 delete [].

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

然而,这是错误的工具(除非您正在使用遗留代码或包装使用原始数组指针的东西)。您要使用的是 std::vector<char>,它是一个动态数组,用于抽象所有内存管理。

这就是您在循环中使用它的方式,不太确定您为什么不想使用括号表示法,因为这是完成这里工作的工具。

#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);