我想写一个简单的事件管理器类和听众的游戏引擎。在通常的实现中(即McShaffry),事件管理器注册监听器,原则上将shared_ptr作为私有成员保存到监听器。所有权和如何避免shared_ptr
我在很多情况下看到人们应该避免使用shared_ptr和类似的东西(例如here)。因此,我试图找到实现事件管理器的方式,而不共享监听器的所有权。
我想到的一种方法是给侦听器分配唯一的ID,并在事件管理器中注册它们的ID。然后,监听者负责在事件管理器更新后“询问”事件管理器,如果在他们的ID下有任何事件可用。
我想问一下,在这种情况下是否有更清洁和/或标准的方法来避免共享所有权,但也是一般情况。例如,我与听众有同样的问题。监听器需要存储一个指向父代(或他们正在监听的对象)的指针,以便在处理事件时可以调用它的方法。
“我在很多情况下都看到人们说应该避免shared_ptr和类似的东西。”小心这种类型的建议。没有语境就没有意义。一般来说,如果你需要指针,没有理由避免使用智能指针。 – Mat