c ++对象将自己的生命周期绑定到lambdas

时间:2017-02-04 09:51:17

标签: c++ shared-ptr

我有一个窗口和一个控制器对象。它们没有紧耦合,但是控制器将自身绑定到窗口事件(通过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_sharedBindSignals是样板代码,但这是个好主意吗?
  • 是否允许创建临时shared_ptr(this)以便能够在之后拨打shared_from_this()
  • 对于使用我的控制器的其他开发人员,很难看到它必须在堆上创建并由shared_ptr管理。也许表示,控制器ctor应该是私有的,并通过静态方法实例化,正确地执行它?
  • 有没有更好的想法来解决这个问题?

谢谢!

0 个答案:

没有答案