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

问题描述 投票:0回答:2

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

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]

[暂时,让我们忘记括号表示法不存在(它可以工作,但是我想知道一种使用指针表示法的方法),所以我可以以可靠的方式增加或访问将来的指针,这样我就可以在诸如循环之类的东西中使用它,以在智能指针数组的每个指针中输入值。

c++ arrays c++11 pointers smart-pointers
2个回答
0
投票

shared_ptr不支持算术运算。 shared_ptr的目的是管理其拥有的指针的生存期。

[当您指向数组并使用shared_ptr运算符时,将索引到数组。


0
投票

[]是指向one char的指针。当共享指针被破坏时,它将在其指针上调用std::shared_ptr<char>,而不是delete

您可以使用delete [],然后可以让该指针保存一个字符数组。

然而,这是工作的错误工具(除非您使用的是旧版代码或包装使用原始指向数组的指针的东西)。您要使用的是std::shared_ptr<char[]>,它是一个将所有内存管理抽象出来的char的动态数组。

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

std::vector<char>

IMO更好的选择是改为使用#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] << ' '; }

© www.soinside.com 2019 - 2024. All rights reserved.