我有有指點一下那些電影的一個項目中,有一個與電影叫做「電影」列表的主類,和工人階級的列表的指針。問題是,每次我刪除電影從我的列表它不會自動在我的工人名單中刪除,我有這一個了幾個小時無解..代碼非常簡單..去除指針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