我有
class Derived : public Base
- 如果我有
std::list<G>
如何释放列表? - 如果我有
std::list<G*>
在A
, 如何释放列表? - 析构函数 - 哪个应该是虚拟的,
A
的析构函数或B
的析构函数? - 我什么时候使用
list.clear()
以及何时使用list.empty()
? - 相同的问题 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/