【发布时间】:2012-12-25 03:13:48
【问题描述】:
我正在尝试为游戏引擎编写一个简单的事件管理器类和侦听器。在通常的实现中(即McShaffry),事件管理器注册监听器,原则上将 shared_ptr 作为私有成员保存到监听器。
我在很多情况下看到有人说应该避免 shared_ptr 之类的东西(例如here)。因此,我试图在不共享侦听器所有权的情况下找到实现事件管理器的方法。
我想到的一种方法是为侦听器分配唯一的 ID,并将其 ID 注册到事件管理器。然后,监听器负责在事件管理器更新后“询问”事件管理器是否有可用的事件。
我想问一下在这种情况下是否有更简洁和/或标准的方法来避免共享所有权,但通常也是如此。例如,我对听众有同样的问题。侦听器需要存储指向其父对象(或它们正在侦听的对象)的指针,以便在处理事件时调用其方法。
【问题讨论】:
-
“我在很多情况下看到人们说应该避免 shared_ptr 之类的东西。”小心这种类型的建议。没有上下文是没有意义的。如果您需要指针,一般没有理由避免使用智能指针。
标签: c++ event-handling shared-ptr ownership