c样式this或shared_from_this作为函数参数

时间:2019-03-28 11:24:09

标签: c++ c++17

因此,情况如下:基本上有一个MainControl,它有一个调度程序并调用一些函数。但是,调度程序必须通过MainControl调用Monitor中的某些函数,例如MainControl类。同样,Monitor类应该能够通过DispatcherMainControl访问函数。

问题是我应该像在this中那样使用智能指针传递dispatcher.Init指针,还是在monitor.Init()中使用C风格的指针传递指针。还是有另一种更好的方法。明确地说,我知道也可以使用c样式引用传递this指针。

Class MainControl : public std::enable_shared_from_this<MainControl>
{
public:
   void Init()
   {
       dispatched.Init(shared_from_this());
       monitor.Init(this);
   };
   Dispatcher &GetDispatcher() { return dispatcher;}
   Monitor &GetMonitor() { return monitor;}
   void DoSomeThing();

protected:
   Dispatcher dispatcher; 
   Monitor monitor;
};

class Dispatcher
{
public:
   void Init(shared_ptr<MainControl> ctrl)
   {
      mainCtrl = ctrl;
   };
   void DoSomethingFromMainController()
   {
      mainCtrl->DoSomething();
      mainCtrl->GetMonitor().DoSomething();
   };
   void DoSomethingElse();

protected:
   shared_ptr<MainControl> mainCtrl;
};

class Monitor
{
public:
   void Init(MainControl *ctrl)
   {
       mainCtrl = ctrl;
   }
   void DoSomethingFromDispatcher()
   {
       mainCtrl->GetDispatcher().DoSomethingElse();
   }
   void DoSomething();
protected:
   MainControl *mainCtrl;
};

1 个答案:

答案 0 :(得分:1)

还有其他方法,例如根本不引用父级:

[0, 1, 2, 3, 5, 6, 7, 8, 9]