1

我正在尝试完全删除包含对指针的引用的向量。

我已经在 stackoverflow 中找到了关于这个的线程,但是我有一点不同的情况,我相信,当他们阅读这个问题时,这会让其他人受益。

我的类中有内部类,以隐藏初始化和变量的实现。因此,当我尝试使用它时,我必须创建指向向量的指针。在这里,我编写了如何从向量中完全删除这些对象并清理向量本身的方法:

   void Program::deleteAll(){
      vector<Category> *ptr = &(impl->categories);
      vector<Category>::iterator it;
      for (it = ptr->begin(); it != ptr->end(); ){
         delete *it;  
         it = ptr->erase(it);
         it++;
      }
   }

问题就在这里:删除 *it。我在这里得到一个错误。在这个循环中如何删除存储为对象指针的对象?我可以告诉你,我如何将对象放入矢量类别:

   void Program::addCategory(string name){
      vector<Category> *ptr = &(impl->categories);
      Category cat(name);
      ptr->push_back(cat);
   }
4

1 回答 1

2

这很简单

void Program::deleteAll()
{
   impl->categories.resize(0);
}

每个Category对象的析构函数将由 调用std::vector,因此内部的任何指针Category都将被清除。

于 2013-11-11T16:12:20.180 回答