繁体   English   中英

指针向量

[英]A vector of pointers

我试图从文件中读取数据,从数据中创建评论者,然后创建指向每个评论者的指针向量。 在我阅读了第一个评论家的数据并将其设置为“批评”之后,

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

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

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

但是,每次将指针向后推时,所有指针都指向同一评论家。

从您的代码看来,您正在将所有指针值设置为一个实例,而只是不断更改该实例。 每当值更改时,您都必须创建新实例:

NightHawks *nhp = new Critic();

如果要将它们插入向量中,强烈建议使用shared_ptrs,这样就不必担心释放内存。

它们指向同一评论者,因为您为他们分配了相同变量theCritic的地址

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

此外,如果变量theCritic是局部变量,则程序可能具有未定义的行为,因为指向变量的指针在局部变量将被销毁后变为无效。

每次构建类型为注释器的对象时,都应在堆中构建它,即应使用运算符new

将其放置在向量中时,需要创建一个新的注释器。 否则所有数据都指向相同的存储位置。

criticPointer.push_back(new NightHawks(theCritic));

更好的是,不存储指针,而只是将评论者值存储在向量中。

正如您在评论中提到的那样, 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 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 ,您的问题是您正在更改同一变量的内容。 为不同的评论者创建新变量,分配给他们,然后将地址放入向量中。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM