指针向量

时间:2014-03-04 16:14:07

标签: c++ pointers vector

我正在尝试从文件中读取数据,从数据创建批评者,然后创建指向每个评论家的指针向量。在我读完第一批评论家的数据并将其设置为批评后,我有

NightHawks *nightHawkPtr = &theCritic; 
criticPointer.push_back(nightHawkPtr);

然后我尝试将它们打印出来。

 for (int i = 0; i < criticPointer.size(); i++)
    {
        criticPointer[i]->text();
    }

但是,每次指针被推回时,所有指针都指向同一个评论家。

4 个答案:

答案 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,您的问题是您正在更改同一变量的内容。为不同的评论家创建新变量,分配给他们,然后将地址推送到向量中。