我有一个窗口和一个控制器对象。它们没有紧耦合,但是控制器将自身绑定到窗口事件(通过boost :: signals2)并且我希望控制器被销毁,如果窗口被销毁(或者如果它的所有事件处理程序被替换/删除)。这个想法是将lambda绑定到shared_from_this
。
... boost::bind(&MyController::OnInitialize, shared_from_this())
。
这实际上可以在我的控制器的构造函数中完成,但是我得到了bad_weak_ptr异常,因为在第一次shared_from_this
调用之前,该对象必须由shared_ptr
管理( docs说。)。
换句话说:ctor中的shared_from_this
永远不可能。
当前的解决方案:我的解决方法是一个空的ctor和一个BindSignals
方法,它是在通过make_shared
创建对象后调用的。
问题:
make_shared
和BindSignals
是样板代码,但这是个好主意吗?shared_ptr(this)
以便能够在之后拨打shared_from_this()
?shared_ptr
管理。也许表示,控制器ctor应该是私有的,并通过静态方法实例化,正确地执行它?谢谢!