我有一个事件对象,该对象应该是类的成员:
class Foo
{
public:
Event event_;
}
函数可以订阅此事件并在事件上调用invoke时被调用:
Foo * foo = new Foo();
Event & event_ = foo->event_;
int id = event_.Subscribe(*some std::function<void()>*);
event_.Invoke();
// a lot of stuff happens until we no longer need to be subscribed to the event
event_.Unsubscribe(id);
现在,让我们假定在出于任何原因取消订阅之前删除了该对象foo。为了防止这种情况,我可以将事件设置为shared_ptr。
class Foo
{
public:
std::shared_ptr<Event> event_;
}
从概念上讲这是错误的吗?如果设计良好,是否可以在销毁对象之前永远不会取消订阅?我是否通过将它设置为shared_ptr来隐藏潜在的错误/内存泄漏?还是这种好习惯?
面向所有对c ++中的完整event-system感兴趣的人。