我正在编写一个事件处理系统(遵循观察者模式......),我想知道哪个是传播或传播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那样复杂,请学习,请写下来)
答案 0 :(得分:1)
如果通过引用传递堆栈分配的对象,则它与传递指针之间没有性能差异。
如果你通过指针,那么一些代码必须负责delete
对象。 OTOH,如果对象的生命周期需要超出其创建的范围,那么您将被迫进行动态分配。在这种情况下,也许您可能需要进行引用计数。没有更多信息就很难说。