从指针列表c++中删除指针
removing a pointer from list of pointers c++
我有一个项目,其中有一个名为"Movies"的主类和一个指向其中一些电影的Worker类。问题是,每次我从我的列表中删除一部电影,它都不会自动在我的工作人员列表中删除,而且我在几个小时内都没有解决这个问题的办法。。代码非常简单。。
在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--;
}
电影正在按预期添加到列表中,问题是一旦我删除了其中一部电影,我就不知道如何在不造成麻烦的情况下从Worker中删除指向它的指针。这是我在main类中关于如何从列表中删除电影的代码(预计所有指向它的指针都会从列表中被删除)。重要-电影会从主列表"电影"中删除,并按预期添加到"moviesOfWorker"中,但不会从Worker类(Movie*moviesOfWorker列表)中删除。
在我的主要班级,电影工业班:
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++);
}
}
}
}
以下是我添加Worker:的方法
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
}
正如我提到的,添加没有问题,只有删除。。帮助。。??
这是一个同步问题,而不是内存管理问题。如果您首先从电影列表中删除电影,那么您将无法从Workers中删除其地址。其地址将不再可用。因此,你需要从获取电影的地址开始。
Movie *address = nullptr;
for (movie: movies) {
if (movie.getCode() == code) address = &movie;
}
一旦你有了地址,你需要浏览你的Worker*列表,并将其从每个Worker中删除。
完成后,将其从电影列表中删除。
相关文章:
- 使用函数引用指向节点的指针删除链表中的节点?
- 如何通过指向元组的共享指针删除对象
- 函数内的 C++ 指针删除
- 一个对象的两个指针.删除了一个指针,对象仍然存在
- 如何通过存储在 std::list 中的指针删除对象?
- C++中的智能指针删除
- 将C 中的每个指针删除作为阵列的指针安全吗?
- 使用 C 字符串和指针.删除除小写和空格以外的任何字符
- 在特定情况下,指针删除和铸造之间的关系不清楚
- 提升属性树:使用指向节点及其父节点的指针删除节点
- 警告C4150在尝试包装本机C 类时,指向不完整类型的指针删除
- C++ Valgrind 双指针删除,用于防止内存泄漏
- C 通过指向其基类的指针删除派生对象
- 将指针删除到数组
- 当通过其中一个指针删除对象时,C++将所有指针设置为null
- 智能指针删除器和"using"名称为"pointer"关键字
- 通过指向其基的指针删除 POD 对象是否安全
- 模板化的出列无效指针:删除类时失败
- 使用"this"指针删除
- (C++) list.error 方法和使用指针删除内存