[英]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.