从模板列表中删除对象

时间:2010-09-22 10:39:33

标签: c++ stl subclass destructor delete-operator

我有一个模板列表说,

List<SuperClass*>* mList;

for(int i = 0;i < mList->ElementsCount();i++)
    mList->DeleteElementAtIndex(i);

在子类的mList对象中添加。

在从列表中删除对象时, 我是否需要将对象转换为相应的子类并调用delete方法?

1 个答案:

答案 0 :(得分:3)

不,在没有显式转换的情况下调用每个指针上的delete运算符就足够了,但是必须确保类层次结构中类的析构函数声明为virtual(它足以标记只是基类中的一个)。这样,对析构函数的调用将是一个虚拟调用,因此将调用正确的析构函数。

如果你没有将析构函数声明为虚拟,那么当在每个指针上调用delete时,将调用基类的析构函数而不是正确的析构函数;这就是为什么在没有virtual析构函数的情况下拥有类层次结构几乎总是错误的原因。

有关此内容的更多信息,请参阅C ++ FAQ Lite的relevant entry

顺便说一下,该列表似乎不是STL列表(std::list),如果是这样,你应该从你的问题中删除STL标记。