插入到指针列表中
insert into a list of pointers c++
我试图查看一个Movie实例列表,并将其中一个添加到Worker类中的Movie*列表中。问题是,当我试图从WorkerClass打印出这部电影时,意味着要查看Worker类的movie*列表,它会打印垃圾。
void MovieIndustry::addWorkerToMovie(string code, int id) {
Worker* toBeAdded;
Movie movieToAdd;
for (std::list<Worker*>::iterator it=workers.begin(); it !=
workers.end(); ++it)//look for Worker
{
toBeAdded = *it;
for (std::list<Movie>::iterator it2=movies.begin(); it2 !=
movies.end(); ++it2) //look for movie
{
if( it2->getCode() == code)
{
movieToAdd = (*it2);
it2->addWorker(*toBeAdded); //Works
(*it)->addMovieToWorker(movieToAdd);
}
}//end for
} //end for
}
试图从Worker.cpp中的列表中打印一部电影,它给了我:
void Worker::printWorkersMovies() const {
std::list<Movie*>::const_iterator movitt;
if(getNumOfMovies() >> 0)
{
for (movitt=moviesOfWorker.begin(); movitt != moviesOfWorker.end();
++movitt)
{
std::cout << "length is" << ( (*movitt)-> getLength() ) <<std::endl;
// IT PRINTS OUT length is: 943829758935781957
// even though I inserted length = 2
}
}
}
复制电影的构造函数,即使我用指针写:
Movie::Movie(const Movie& toCopy) {
code = toCopy.getCode();
name = toCopy.getName();
length = toCopy.getLength();
year = toCopy.getYear();
rate = toCopy.getRate();
preview = toCopy.getPreview();
}
我向Worker实例添加电影的方法:
void Worker::addMovieToWorker(Movie& toAdd){
moviesOfWorker.push_back(&toAdd);
}
您正在将指向自动存储的指针添加到列表中。一旦addWorkerToMovie
返回,movieToAdd
就会被销毁,但你仍然有一个指向它曾经所在内存的指针。以后使用该指针时的行为是未定义的,但在你的情况下,你的程序已经将该内存重新用于其他用途,而它恰好将943829758935781957
存储在你电影长度曾经所在的位置。
为了实现这一点,您需要存储指向对象的指针,这些对象在以后需要使用时仍然存在。看起来你的Worker
类有一个Movie
的列表,所以你可以存储一个指向其中一个的指针,而不是复制。如果没有,您可能需要使用new
动态分配对象,在这种情况下,您需要确保在使用完对象后使用delete
。
相关文章:
- 为什么这个 std::queue/指向结构的指针列表直到 List.Size() == 0 才释放内存?
- 创建一个棋盘格或"Interweave"两个链接列表。IE 更改两个链表的指针
- 如何在构建链接列表时调整头、尾指针
- 什么更好?返回对象指针列表?或返回指向对象列表的指针?
- 处理从列表中删除指向对象的指针的"healthy"方法是什么?
- 编译包含指向模板函数的指针的初始值设定项列表时,gcc 出错,但 clang 不出错
- 如果函数采用指向类的指针,则函数将完全脱离候选列表
- 如何将共享指针列表传递到pybind11中的c++对象
- Unique_ptr:在列表中放置时未分配释放的指针
- C++:如何初始化包含具有给定键的指针列表的映射
- 使用继承的指针列表复制构造函数或重载运算符=
- 什么是结构开头的函数列表指针,称为 c++
- 使用 c++ 的 STL 列表 ..在传递列表指针的数组中
- 静止图像::获取设备列表指针
- 列表指针类的输出向量
- 使用PThreads访问全局列表-指针问题
- 操作迭代器列表+指针
- 在c++中分配带有列表指针值的STD映射
- python链接列表指针和大小
- 如何调整STL列表指针的大小