似乎它的简单问题,但我怀疑。请运营商delete
销毁全部Object
的元素当我拨打delete list
非空列表用运营商创建new
?当然会,但我需要确认。正如你所看到的Object
有构造函数,但没有分配器。C++操作符新增并删除内存泄漏与容器
代码:
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;
};
我很确定它会。但处理这种情况的最简单方法是创建一个析构函数,用于输出消息并查看是否有输出。 – StoryTeller
我假设你的意图是*不*在本示例中练习类[Object]的[Rule of Three](http://en.wikipedia.org/wiki/Rule_of_three_(C%2B%2B_programming))。有时你不需要(对象不“拥有”ptr_OtherObject对象),但很难说这是否是其中的一种。希望你会知道(这是毕竟你的代码)。 – WhozCraig
请检查一下http://www.boost.org/doc/libs/1_52_0/libs/smart_ptr/smart_ptr.htm – czchlong