c++ - 列表的析构函数删除虚拟 C++,基本问题

标签 c++ list pointers memory destructor

我有

class Derived : public Base
  1. 如果我有 std::list<G>如何释放列表?
  2. 如果我有 std::list<G*>A , 如何释放列表?
  3. 析构函数 - 哪个应该是虚拟的,A的析构函数或 B的析构函数?
  4. 我什么时候使用list.clear()以及何时使用 list.empty()
  5. 相同的问题 1-2 但带有 std::vector

这是我的代码:

class Movie{
    list<Worker*> workersInMovie;
    list<G> g;

    Movie::~Movie() {
        for(list::<Worker*>::iterator it = workersInMovie.begin();
            it != workersInMovie.end(); ++it;)
            delete it;

        g.clear();
    }
};

最佳答案

第一个问题:(列表)

  • 您的列表将在类销毁时自动删除

第二题:(列表指针)

  • 在您的类的析构函数中,您必须删除所有指针。使用了一个技巧std::shared_ptr<>当没有人引用它时,它会自动销毁你的指针

关于您提出的代码:

更好用auto (如果您使用的是 C11 或更新版本)比 list::<Worker*>::iterator

for(auto it=workersInMovie.begin(); it!=workersInMovie.end(); it++){           
   delete *it; 
 }

关于c++ - 列表的析构函数删除虚拟 C++,基本问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34181029/

相关文章:

c++ - 编译时基类指针偏移到派生类

C++:如何摆脱惰性初始化

python - 从列表中删除值

list - 定义规则以确定列表是否包含给定成员

arrays - 如何将指针/数组作为参数传递给 GTK 回调函数?

C指针算术和数组访问

c++ - 三重限制正整数组合的非递归枚举

c++ - 使用空值更新 uniqueidentifier 列时出现 ODBC 错误 'String data, right truncation'

list - 如何从 stdin 读取 haskell 中单独一行上的每个整数来初始化整数列表?

python - 如何调用从 Python 获取并返回自定义类型指针的 delphi 函数?