我正在尝试设计一个简单的事件系统,“基本上”看起来像这样:
- 观察者实体保留所有需要通知的对象的列表。它还存储触发事件的队列。事件然后由对象列表处理,遍历该对象列表。
- 一个对象保存一个它发送事件的观察者列表。从基础对象继承的每个特定对象都可以触发其自己的专用事件(键、鼠标、碰撞等)。该对象还有一个
HandleEvent(..)
用于编译时类型检测的具有不同重载的方法,而不是使用dynamic_casting
.
触发事件时最好选择什么:在堆栈上创建它们并通过引用传递它们,或者在堆上动态分配它们并使用 dynamic_casting 并让观察者在它们被可以处理它们的对象处理时释放它们? (例如,当一个事件可以经常被触发时,动态分配是不是不必要的;动态转换呢,不是可以避免的吗?)。
此外,这不是一个线程安全的场景。