我一直试图弄清楚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]
[暂时,让我们忘记括号表示法不存在(它可以工作,但是我想知道一种使用指针表示法的方法),所以我可以以可靠的方式增加或访问将来的指针,这样我就可以在诸如循环之类的东西中使用它,以在智能指针数组的每个指针中输入值。
shared_ptr
不支持算术运算。 shared_ptr
的目的是管理其拥有的指针的生存期。
[当您指向数组并使用shared_ptr
运算符时,将索引到数组。
[]
是指向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] << ' ';
}