管理事件的传播:指针或实例

Managing propagation of Event: pointer or instance?

本文关键字:指针 实例 传播 事件 管理      更新时间:2023-10-16

我正在编写一个事件处理系统(遵循观察者模式…)我想知道哪种是传播或传播事件类的最佳方式,就像这样:

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

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

Event e(1);
notifyAll(e);

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

我知道这是一个非常常见的问题,我知道一般情况下建议的指导方针,但我想知道在事件处理的具体情况下照顾性能,优化,线程安全等。

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

谢谢。(例如,如果你知道任何好的实现,不像qt那么复杂,请把它写下来)

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

如果你通过指针传递,那么一些代码必须负责对象的delete -ing。当然,如果对象的生存期需要保持在创建它的作用域之外,那么就必须进行动态分配。在这种情况下,可能需要执行引用计数。如果没有更多的信息,很难说。