我有有指点一下那些电影的一个项目中,有一个与电影叫做“电影”列表的主类,和工人阶级的列表的指针。问题是,每次我删除电影从我的列表它不会自动在我的工人名单中删除,我有这一个了几个小时无解..代码非常简单..去除指针C++
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--;
}
电影被添加到预期的名单,问题是,一旦我删除那些电影之一,我不知道如何实际它从工人删除指针指向不会造成麻烦。这里是我从主类的代码,就如何从列表中删除一部电影(预计,所有指向它的指针都将从列表中删除)。 重要 - 电影得到从主列表中删除“电影”,并且预计到“moviesOfWorker”,但不得到从Worker类删除(短片* 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 .. ??
如果您切换到使用[智能指针(https://en.wikipedia.org/wiki/Smart_pointer),你就不需要担心内存管理。 – NathanOliver
不能在我的代码中使用它们.. – aviadm71
你有什么问题?您的工作人员列表不拥有这些指针,因此您只需从主列表中删除该影片后删除列表条目。你究竟在挣扎什么? – SergeyA