概述
//线程控制类
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得到的是同一个实例对象,请教前辈说这是设计模式中的单例模式的内容,以后有机会看一看。
最后
以上就是和谐西装为你收集整理的类内定义指向类自己的静态指针成员的用途的全部内容,希望文章能够帮你解决类内定义指向类自己的静态指针成员的用途所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复