C++事件系统-使用基于堆或堆栈的事件



我正在尝试设计一个简单的事件系统,"基本上"看起来像这样:

  • 观察器实体保存一个需要通知的所有对象的列表。它还存储一个已触发事件的队列。然后,事件由对象列表处理,并在该对象列表中迭代
  • 一个对象保存了一个向其发送事件的观察者列表。每个从基本对象继承的特定对象都可以激发自己的专门事件(键、鼠标、碰撞等)。该对象还有一个方法HandleEvent(..),该方法具有不同的重载,用于编译时类型检测,而不是使用dynamic_casting

在触发事件时,最好选择什么:在堆栈上创建它们并通过引用传递它们,或者在堆上动态分配它们并使用dynamic_casting,并让观察者在可以处理它们的对象处理它们时释放它们?(例如,当一个事件可以经常触发时,动态分配不是没有必要吗?动态强制转换呢?这不是可以避免的吗?)。

此外,这不是一个线程安全的场景。。

您需要动态分配吗?不。通常,你想要

void fireEvent()
{
Event ev;
for ( each observer )
observer.trigger(ev);
}

以及观测者的签名

void trigger(const Event& ev);

请注意,从学究的角度来说,"传递对它们的引用"是不正确的。它实际上是"通过引用传递它们"。

相关内容

  • 没有找到相关文章

最新更新