实例代码// 饿汉模式 - 定义类的时候创建单例对象// 定义一个单例模式的任务队列class TaskQueue{public:TaskQueue(const TaskQueue t) delete;TaskQueue operator(const TaskQueue t) delete;static TaskQueue* getInstance(){return m_taskQ;}void print(){cout 我是单例对象的一个成员函数... endl;}private:TaskQueue() default;// TaskQueue(const TaskQueue t) default;// TaskQueue operator(const TaskQueue t) default;// 只能通过类名访问静态属性或方法static TaskQueue* m_taskQ;};TaskQueue* TaskQueue::m_taskQ new TaskQueue; // 加了类名作用域实质仍在类内。构造函数私有化private构造函数就不能通过外部访问构造函数不能访问自然就不能通过new创建一个新对象new对象时一定会初始化即调用构造函数。那这里为什么还能 new TaskQueue 呢还可以在类外直接new一个对象TaskQueue* TaskQueue::m_taskQ new TaskQueue; // 返回new出来对象的地址因为私有是相对作用域外同一作用域没有这些概念都是透明的。上面代码添加了类名作用域TaskQueue::表示这一句代码仍在类内只不过是语法要求写在外面在C中类的静态成员static member必须在类内声明在类外初始化。静态成员在外部初始化是语法要求但初始化实质算在作用域内操作。单例模式完整实例代码#includeiostreamusing namespace std;// 饿汉模式 - 定义类的时候创建单例对象// 定义一个单例模式的任务队列class TaskQueue{public:TaskQueue(const TaskQueue t) delete;TaskQueue operator(const TaskQueue t) delete;static TaskQueue* getInstance(){return m_taskQ;}void print(){cout 我是单例对象的一个成员函数... endl;}private:TaskQueue() default;// TaskQueue(const TaskQueue t) default;// TaskQueue operator(const TaskQueue t) default;// 只能通过类名访问静态属性或方法static TaskQueue* m_taskQ;};TaskQueue* TaskQueue::m_taskQ new TaskQueue; // 加了类名作用域实质仍在类内。int main(){TaskQueue* m_taskQ TaskQueue:: getInstance();m_taskQ-print();return 0;}m_taskQ 是私有的private类外不能访问只能通过公用的成员函数public访问。能够操纵静态成员变量的函数只有静态成员函数。作用在单例设计中Singleton类在定义的时候将构造方法私有化而在内部仅仅new出一个对象是为了禁止别的类在外面直接new Singleton()出来这样你只要在Singleton类中new一个对象就能确保无论什么情况都只会产生一个Singleton对象外部无法new出来内部已经定义好了有且仅有一个对象这就是单列设计的核心。单例设计模式目标是保证一个类在内存中对象的唯一性。所以要保证自己的类中创建了对象之后其他的类不能再创建对象只能获取这个对象。所以只要将本类中的构造函数私有化其他程序就无法再创建该类对象。原文链接https://blog.csdn.net/zsyyugong/article/details/140242550