c ++ operator new和删除容器的内存泄漏

abr*_*hab 0 c++ memory containers memory-leaks list

似乎是一个简单的问题,但我怀疑.当我调用用运算符创建的非空列表时,运算符是否会delete销毁所有 Object元素?当然会,但我需要确认.如你所见有构造函数,但没有经销商.delete list newObject

码:

std::list<Object>* ptr_listObjects = new std::list<Object>();
OtherObject* ptr_null = NULL;
ptr_listObjects->push_back ( Object( ptr_null, 'A') );
ptr_listObjects->push_back ( Object( ptr_null, 'A') );
ptr_listObjects->push_back ( Object( ptr_null, 'A') );
ptr_listObjects->push_back ( Object( ptr_null, 'A') );
ptr_listObjects->push_back ( Object( ptr_null, 'A') );
ptr_listObjects->push_back ( Object( ptr_null, 'A') );
delete ptr_listObjects; // no any possible memory leaks? (Object does not use `new` operator)


class Object
{
public:
    Object( OtherObject* ptr_other, char xxx):
    ptr_OtherObject(ptr_other),
    charflag(xxx)
    {}


    OtherObject* ptr_OtherObject;
    char charflag;
};
Run Code Online (Sandbox Code Playgroud)

Ed *_* S. 6

std::list析构函数将运行,它的元素的析构函数也将运行.也就是说,为什么要动态分配容器呢?你让容器无法为你管理内存.让它发挥作用; 使用自动存储持续时间分配列表.

顺便说一句,Object 确实有一个析构函数,编译器会为你生成一个空的析构函数.虽然没有什么可以清理的,所以它什么都不做.此外,从类设计中可以清楚地看出,实例Object并不拥有它在构造函数中使用的指针,因此除非您显着更改设计,否则请务必取消分配它.