【发布时间】:2012-12-07 04:05:45
【问题描述】:
似乎是一个简单的问题,但我很怀疑。当我为非空列表使用运算符创建 new 调用delete list 时,运算符delete 会破坏所有 Object 的元素吗?当然会,但我需要确认。如您所见,Object 有构造函数,但没有分发器。
代码:
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;
};
【问题讨论】:
-
我很确定它也会。但是处理这种情况最简单的方法是创建一个析构函数来打印一条消息并查看是否有任何输出。
-
我假设您的意图是不在此示例中为
Object类练习 Rule of Three。有时您不需要(对象不“拥有”ptr_OtherObject对象),但很难说这是不是其中之一。希望你会知道(毕竟是你的代码)。
标签: c++ list memory containers memory-leaks