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

Returning a pointer to an object from a list

本文关键字:对象 指针 列表 返回      更新时间:2023-10-16

我在类FutureEvent中有一个对象列表,我希望能够在其中执行类似futureEvents.getNextEvent()的操作。这是我目前所拥有的,但由于New调用,我认为这是我主要内存泄漏的原因。如有任何帮助,我们将不胜感激。否则我怎样才能将指针返回到下一个事件。感谢

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