0

似乎很简单的问题,但我很怀疑。当我调用使用运算符创建的非空列表时,运算符会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;
};
4

1 回答 1

6

std::list析构函数将运行,其元素的析构函数也将运行。也就是说,你为什么要动态分配一个容器?您使容器无法为您管理内存。让它发挥作用;分配具有自动存储期限的列表。

顺便说一句,Object 确实有一个析构函数,编译器会为你生成一个空的。但是没有什么要清理的,所以它什么也没做。此外,从类设计中可以清楚地看出,实例Object不拥有其构造函数中的指针,因此请确保永远不要释放它,除非您对设计进行了重大更改。

于 2012-12-19T18:20:59.257 回答