我正在尝试从文件中读取数据,从数据创建批评者,然后创建指向每个评论家的指针向量。在我读完第一批评论家的数据并将其设置为批评后,我有
NightHawks *nightHawkPtr = &theCritic;
criticPointer.push_back(nightHawkPtr);
然后我尝试将它们打印出来。
for (int i = 0; i < criticPointer.size(); i++)
{
criticPointer[i]->text();
}
但是,每次指针被推回时,所有指针都指向同一个评论家。
答案 0 :(得分:2)
从您的代码中,您似乎将所有指针值设置为一个实例,并且只是不断更改该实例。每次值更改时都必须创建新实例:
NightHawks *nhp = new Critic();
如果要将它们插入到矢量中,强烈建议使用shared_ptrs,这样您就不必担心释放内存。
答案 1 :(得分:2)
他们指向同一个评论家,因为你为他们分配了同一个变量theCritic
NightHawks *nightHawkPtr = &theCritic;
criticPointer.push_back(nightHawkPtr);
此外,如果变量theCritic是局部变量,则程序可能具有未定义的行为,因为在局部变量被销毁之后,指向变量的指针无效。
每次构建一个类型为crit的对象时,你应该在堆中构建它,你应该使用operator new
。
答案 2 :(得分:2)
当你把它放在矢量中时,你需要做一个新的评论家。否则所有数据都指向相同的内存位置。
criticPointer.push_back(new NightHawks(theCritic));
更好但是不存储指针只是将批评值存储在向量中。
答案 3 :(得分:0)
正如您在评论中提到的I declare the critic like this NightHawks theCritic; and then i use getLine to read the input from the file and then I use setters to set the input to theCritic
,您的问题是您正在更改同一变量的内容。为不同的评论家创建新变量,分配给他们,然后将地址推送到向量中。