类内定义指向类自己的静态指针成员的用途

//线程控制类
class ThreadControl {
public:
  static ThreadControl * GetInstance();
  virtual ~ThreadControl();
  
protected:
  static ThreadControl* thread_control_;//指向类本身的静态类成员
  explicit ThreadControl();
  ThreadControl(const ThreadControl &);
  ThreadControl & operator =(const ThreadControl &);
public:
  ThreadPool thread_pool;
};


//线程控制构造函数
ThreadControl::ThreadControl()
  : thread_pool(20)//开启线程上限为20的线程池
{
}

//线程池类
class ThreadPool {
public:
  ThreadPool & operator =(const ThreadPool &) = delete;
  ThreadPool(const ThreadPool& other)         = delete;
  
  ThreadPool(int32_t threads);

  virtual ~ThreadPool();
 };
 
 //得到类的实例
ThreadControl * ThreadControl::GetInstance()
{
  if (!thread_control_)
  {
    thread_control_ = new ThreadControl;
  }
  return thread_control_;
}

inline ThreadPool::ThreadPool(int32_t threads)
{
  //开启线程池
}


//根据不同类型开启不同处理线程
case A:
        ThreadControl::GetInstance()->thread_pool.X();
case B:
      {
        ThreadControl::GetInstance()->thread_pool.X();
      }

 case C:
      {
        ThreadControl::GetInstance()->thread_pool.X();
      }

 case D:
      {
        ThreadControl::GetInstance()->thread_pool.X();
      }

 case E:
      {
        ThreadControl::GetInstance()->thread_pool.X();
      }

在上面的代码中,我有一个疑问:当根据不同类型开启不同处理线程时,都会调用

ThreadControl * ThreadControl::GetInstance()
{
  if (!thread_control_)
  {
    thread_control_ = new ThreadControl;
  }
  return thread_control_;
}

新建一个线程控制对象,赋值给指向自己的静态指针成员,都知道静态成员会保留最新的赋值,在新建对象时都会调用线程控制构造函数

//线程控制构造函数
ThreadControl::ThreadControl()
  : thread_pool(20)//开启线程上限为20的线程池
{
}

相当于每次处理不同的数据时,都会新建一个线程池(20个线程),由于函数

ThreadControl * ThreadControl::GetInstance()

中有一个判断语句,判断 thread_contron 是否为空,保证了只有一次实例化。而实际上,添加指向自己的静态指针成员,目的就是在整个程序运行中只实例化一次,整个程序中GetInstance得到的是同一个实例对象,请教前辈说这是设计模式中的单例模式的内容,以后有机会看一看。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值