我在类FutureEvent中有一个对象列表,我希望能够像futureEvents.getNextEvent()一样。这是我目前的工作,但是由于新的调用,我认为这是我的主要内存泄漏的原因。任何帮助将不胜感激。我怎么能返回指向下一个事件的指针。感谢
EVENT* FutureEvent::getNextEvent()
{
EVENT* nextEvent = new EVENT;
*nextEvent = futureEvents.front();
futureEvents.pop_front();
return nextEvent;
}
答案 0 :(得分:4)
如果你没有delete
这个函数的结果,这肯定是内存泄漏的原因。
可能的解决方案包括:
按值返回
使用这种方法,您甚至不需要使用动态分配(即new
)。您只使用自动对象,因此您不需要清理:它们使用的内存会自动释放,并且会自动调用任何析构函数。
EVENT FutureEvent::getNextEvent() {
EVENT nextEvent = futureEvents.front();
futureEvents.pop_front();
return nextEvent;
}
使用智能指针
这种方法仍然使用动态分配,但它会委托给一个可以自动处理清理的类。
std::unique_ptr<EVENT> FutureEvent::getNextEvent() {
std::unique_ptr<EVENT> nextEvent(new EVENT(futureEvents.front()));
futureEvents.pop_front();
return nextEvent;
}
如果你的编译器不支持std::unique_ptr
,你可以使用Boost中的一个智能指针,如boost::shared_ptr
。