c++ - 插入指针列表 C++

标签 c++ list pointers copy-constructor

我正在尝试查看 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::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 动态分配您的对象,在这种情况下,您需要确保在使用完它们后删除它们。

关于c++ - 插入指针列表 C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34047135/

相关文章:

c++ - 如何仅 Hook Windows API 上的键盘焦点

C++ 是否将类返回到 const 引用中?

python - 将元组列表写入 txt 文件

python - 如何按用户定义的顺序对列表中的列表进行排序?

c - 如何在C中检索字符串的多个子字符串并将它们写入一个字符串?

c -++在指针中的不同用法

c++ - 如何在 gstreamer 插件中使用 c++ 模块?

Python - 迭代并提取字典类型列表的元素

c - 在 Struct 中查找项目并编辑它们

c++ - 使用 MinGW 编译为带有一些 undefined reference 的 .dll