【发布时间】:2015-05-19 06:59:09
【问题描述】:
我正在循环中创建一些对象并将其添加到列表中:
list<MyObject> myList;
MyObject* ob = new MyObject();
ob.setAttribute("whatever");
myList.push_back(*ob);
循环结束后,我多次使用该列表。
我现在已经启动了泄漏检测器并看到,我必须删除所有 MyObject 对象。
我如何正确删除它们(在析构函数中?)。我应该使用迭代器吗?但是我如何获得真正的对象——而不是迭代器指针?
非常感谢。
【问题讨论】:
-
请注意,您的列表包含原始对象,而不是指向它们的指针。
-
这不会编译 - 您正在尝试将指针推送到对象列表中。除非您有充分的理由与
new开玩笑,否则只需使用push_back(Object()),不要担心内存泄漏。 -
对不起 - 我在问题中编写了示例代码,忘记添加一些细节。我已经修改过了。
-
@丹尼。您的泄漏实际上在这里:
myList.push_back(*ob);只要ob超出范围,在堆上创建的对象就会泄漏。回击获取了MyObject的副本。 -
这很清楚。我知道泄漏是在哪里产生的。当我只有可用列表时,是否无法删除析构函数中的对象?