我有一个项目,其中有一个主要的类,其中包含一个名为" movies"和Worker Class的电影列表,其中包含指向其中某些电影的指针。问题是,每次我从列表中删除一部电影时,它都不会在我的工作人员列表中自动删除,而且几个小时内我没有这个解决方案..代码非常简单..
在Worker类中,希望添加一部电影:
class Worker{
std::list<Movie*> moviesOfWorker;
//from Worker.cpp:
void Worker::addMovieToWorker(Movie* toAdd){
moviesOfWorker.push_back(toAdd); //a list of Movie*
numOfMovies++;
}
void Worker::removeMovieFromWorker(Movie* toRemove){
moviesOfWorker.remove(toRemove);
numOfMovies--;
}
正如预期的那样将电影添加到列表中,问题是一旦我删除其中一部电影,我就不知道如何实际删除指向工作者的指针而不会造成麻烦。这是我的主类中的代码,如何从列表中删除一个电影(并且预期,所有指向它的指针都将从列表中删除)。 重要的是 - 电影会从主列表&#34;电影&#34;中删除,并按预期添加到电影工作室&#34;,但不要从工作班级(电影* moviesOfWorker列表)中删除。
在我的主要课程中,MovieIndustry类:
class MovieIndustry {
list<Movie> movies; //list of all movies
list<Worker*> workers;
void MovieIndustry::removeMovie(string code) {
list<Movie>::iterator it;
if(getNumOfMovies() > 0)
{
for (it=movies.begin(); it!= movies.end(); ++it)
{
if( code == (it)->getCode() )
{
for (std::list<Worker*>::iterator ito=workers.begin(); ito !=
workers.end(); ++ito)//look for Worker
{
toBeRemoved = *ito;
toBeRemoved -> removeMovieFromWorker(&(*it));
delete toBeRemoved;
break;
}
it=movies.erase(it++);
}
}
}
}
这是我添加工人的方式:
void MovieIndustry::addWorkerToMovie(string code, int id) {
Worker* toBeAdded=NULL;
Movie movieToAdd;
if (workers.size()>0 )
{
for (std::list<Worker*>::iterator it=workers.begin(); it !=
workers.end(); ++it) //look for Worker
{
if ((*it) ->getId() == id) //the right Worker
{
toBeAdded = *it;
if(movies.size() > 0)
{
for (std::list<Movie>::iterator it2=movies.begin(); it2 !=
movies.end(); ++it2) //look for movie
{
if( it2->getCode() == code)
{
it2->addWorker(toBeAdded);
(*it)->addMovieToWorker(&(*it2));
}
}//end if
}
}
}
}//endif
}
正如我所提到的,添加没有问题,只有删除.. HELP ..?
答案 0 :(得分:0)
这是同步问题,而不是内存管理问题。如果您从电影列表中删除电影开始,那么您将无法从工作人员中删除其地址。它的地址将不再可用。所以你需要从获得电影的地址开始。
Movie *address = nullptr;
for (movie: movies) {
if (movie.getCode() == code) address = &movie;
}
获得地址后,您需要查看Worker *列表并将其从每个工作人员中删除。
完成后,将其从影片列表中删除。