我有
}
?>
class Derived : public Base
如何免费列表?std::list<G>
中有std::list<G*>
,我该如何免费提供该列表?A
的析构函数或A
的析构函数?B
以及何时使用list.clear()
?list.empty()
?这是我的代码:
std::vector
答案 0 :(得分:1)
第一个问题:(列表)
第二个问题:(列表指针)
std::shared_ptr<>
的技巧会在没有人引用时自动销毁你的指针关于您建议的代码:
最好使用auto
(如果您使用的是C11或更新版本)而不是list::<Worker*>::iterator
for(auto it=workersInMovie.begin(); it!=workersInMovie.end(); it++){
delete *it;
}
}
答案 1 :(得分:0)
你需要自己释放指针。该列表没有指针专用,它对列表中存储的数据一无所知。即使它知道它存储指针(并且有专门化),那么它仍然仍然不知道指针是否应该被删除,如果你存储指针指向不是由new
创建?
答案 2 :(得分:0)
std::list::clear
或让析构工具完成工作delete
(当然,只有当它被new
分配时)virtual
,它也会传播到派生类&#39;成员函数声明std::list::clear
清除列表,std::list::empty
会返回bool
,告诉您列表是否为空(太难检查引用?)std::list
最简洁的析构函数版本(仍使用原始指针):
Movie::~Movie() {
for(auto x : workersInMovie)
delete x;
// no need to clear, std::list's destructor called afterwards
}
使用迭代器的工作版本:
Movie::~Movie() {
for(auto it = workersInMovie.begin();
it != workersInMovie.end(); ++it)
delete *it;
}