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