管理事件的传播:指针或实例
Managing propagation of Event: pointer or instance?
我正在编写一个事件处理系统(遵循观察者模式…)我想知道哪种是传播或传播事件类的最佳方式,就像这样:
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。当然,如果对象的生存期需要保持在创建它的作用域之外,那么就必须进行动态分配。在这种情况下,可能需要执行引用计数。如果没有更多的信息,很难说。
相关文章:
- 有没有一种"cleaner"的方法可以在指向基的指针向量中找到派生类的第一个实例?
- 初始化指向类实例的智能指针并访问其方法
- 为什么我们不在下面给出的代码中使用指针来实例化C++的实体对象?
- 为什么我不能引用指向实例化对象的函数的指针?
- 返回的指针属性中类实例上的矢量属性消失
- 返回 C++ 中的指针实例变量
- <Base> <Derived> 具有相同原始指针共享引用的 shared_ptr 和 shared_ptr 实例是否计数?
- 是否可以将指向未实例化的对象的指针用作C++中的变量?
- 将基本实例指针强制转换为派生实例指针是否合法?(实例不是派生实例)
- 为什么在使用指针时不采用类成员的默认值,而不是直接实例化对象时?
- 对于多态类型T,如何在没有类型T实例的情况下获得指向T的虚拟表的指针
- 指向类实例的指针
- 可以在指向不同模板类实例的指针之间进行强制转换吗
- 为共享指针C++单独实例化对象
- 为什么不能在实例化对基类的引用的同时实例化指向派生类的指针?
- 使用指针实例化模板类
- 如何使用智能指针实例化对象
- 如何强制一个类只使用智能指针实例
- 当类的指针实例超出范围时不调用析构函数是真的吗?
- 是否可以在类的NULL指针实例上调用方法?