从列表返回指向对象的指针

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了从列表返回指向对象的指针相关的知识,希望对你有一定的参考价值。

我在类FutureEvent中有一个对象列表,我希望能够像futureEvents.getNextEvent()一样。这是我目前的工作,但是由于新的调用,我认为这是我的主要内存泄漏的原因。任何帮助将不胜感激。我怎么能返回指向下一个事件的指针。谢谢

EVENT* FutureEvent::getNextEvent()
{
EVENT* nextEvent = new EVENT;
*nextEvent = futureEvents.front();
futureEvents.pop_front();
return nextEvent;
}
答案

如果你没有delete这个函数的结果,这肯定是内存泄漏的原因。

可能的方案包括:

  1. 以价值回归 使用这种方法,您甚至不需要使用动态分配(即new)。您只使用自动对象,因此您不需要清理:它们使用的内存会自动释放,并自动调用任何析构函数。 EVENT FutureEvent::getNextEvent() { EVENT nextEvent = futureEvents.front(); futureEvents.pop_front(); return nextEvent; }
  2. 使用智能指针 这种方法仍然使用动态分配,但它委托给一个可以自动处理清理的类。 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

以上是关于从列表返回指向对象的指针的主要内容,如果未能解决你的问题,请参考以下文章

C#从数组返回对象留下指向数组项的指针

使用指向对象实例的指针列表的访问冲突

C ++在向量迭代中删除并返回指向对象的指针

指向对象和继承对象的指针数组

函数指针

返回指向循环链表的某个点的指针