c++ - 容器超出范围和内存管理

标签 c++ stdlist

<分区>

Possible Duplicate:
Does std::list::remove method call destructor of each removed element?

假设我有这个:

void f(...)
{
    .
    .
    std::list<X*> xList;
    . 
    // Then i fill the list
    std::list<X*>::iterator iter;
    for (iter = xList.begin(); iter != xList.end(); ++iter)
    {
         *iter = new X();
    }

}

当 xList 超出范围时,我知道容器应该调用列表中包含的对象的析构函数?首先,这是真的吗?

如果是这样,那么既然列表包含指向类 X 的指针,当 xList 超出范围时,不应该调用 X 的析构函数吗?从而释放 X 持有的任何内存?

最佳答案

是也不是。 将调用每个元素的析构函数。 但是,这不会产生您想要的效果。元素的类型为 X*,因此将调用 X* 的析构函数(对指针类型不执行任何操作)而不是您需要的 X 的析构函数。您需要明确删除您的元素。一般来说,如果你的代码中有new,那么应该有相应的delete

关于c++ - 容器超出范围和内存管理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12999810/

相关文章:

c++ - 确定应用程序的启动方式 - 由用户启动或自动启动

c++ - 组合两个不同类型的 std::lists:可能吗?

c++ - 从迭代器调用方法

c++ - 嵌套的 STL 列表

c++ - 模板类 : No default constructor

c++ - 通过不同类型的指针删除缓冲区?

c++ - 不期望 priority_queue 的顺序

c++ - 如何从 std::list 实现 O(1) 删除

C++11 用于 std::list 的基于范围的 for 循环

c++ - 交叉编译QT时附加定义