管理Event:指针或实例的传播?

时间:2011-04-19 16:52:00

标签: c++ oop event-handling memory-management propagation

我正在编写一个事件处理系统(遵循观察者模式......),我想知道哪个是传播或传播Event类的最佳方法,如下所示:

class Event{
public:
    Event(int code);
    virtual ~Event();
    int getCode() const;

private:
    int code;
};

详细说明如果通过指针(堆分配)或作为实例(分配堆栈)更好地发送它。

Event e(1);
notifyAll(e);

VS

Event * e = new Event(1);
notifyAll(e)

我知道这是一个非常常见的问题,我知道通用案例的建议指南,但我想知道在事件处理的具体情况下处理性能,优化,线程安全等等。

我的想法是通过堆栈分配发送,看到该类只是一个POD,并避免生命管理问题(或使用智能指针)。 另一方面,事件传播树在我的应用程序中可能非常大,所以我担心它可能是一个问题。

谢谢。 (例如,如果您了解任何良好的实现,而不是像qt那样复杂,请学习,请写下来)

1 个答案:

答案 0 :(得分:1)

如果通过引用传递堆栈分配的对象,则它与传递指针之间没有性能差异。

如果你通过指针,那么一些代码必须负责delete对象。 OTOH,如果对象的生命周期需要超出其创建的范围,那么您将被迫进行动态分配。在这种情况下,也许您可​​能需要进行引用计数。没有更多信息就很难说。