首页 > 代码库 > C++单例模式
C++单例模式
#include <iostream> #include <string> using namespace std; class SignalExample { static SignalExample* c_instance; //将所有的构造函数(构造函数、拷贝构造、赋值重载)都私有化,使外部不能直接创建对象 SignalExample() { } SignalExample(); SignalExample(const SignalExample&); SignalExample& operator = (const SignalExample&); //创建一个静态的私有化成员,用来存储唯一的一个单例对象 public: //静态函数 用于创建唯一的单例对象 必须是公有的静态的,这样在未创建对象之前就可以直接调用 static SignalExample* GetInstance(); void print();//用于打印对象地址的检测函数 }; SignalExample* SignalExample::c_instance = NULL; SignalExample* SignalExample::GetInstance() { //如果已经创建了一个对象,那么直接返回,如果没有则调用构造函数 if (c_instance == NULL) { c_instance = new SignalExample(); } return c_instance; } void SignalExample::print() { cout<<"address-->this:"<<this<<endl; } int main() { SignalExample* s = SignalExample::GetInstance(); SignalExample* s1 = SignalExample::GetInstance(); SignalExample* s2 = SignalExample::GetInstance(); s->print(); s1->print(); s2->print(); return 0; }
#include <iostream> #include <string> #include "Singleton.h" using namespace std; class SignalExample { friend class Singleton<SignalExample>; //将所有的构造函数(构造函数、拷贝构造、赋值重载)都私有化,使外部不能直接创建对象 SignalExample() { } SignalExample(const SignalExample&); SignalExample& operator = (const SignalExample&); //创建一个静态的私有化成员,用来存储唯一的一个单例对象 public: void print();//用于打印对象地址的检测函数 }; class Test { private: friend class Singleton<Test>; Test() { } Test(const Test&) { } Test& operator = (const Test&); public: void print();//用于打印对象地址的检测函数 }; void Test::print() { cout<<"address-->this:"<<this<<endl; } void SignalExample::print() { cout<<"address-->this:"<<this<<endl; } int main() { SignalExample* s = Singleton<SignalExample>::GetInstance(); SignalExample* s1 = Singleton<SignalExample>::GetInstance(); SignalExample* s2 = Singleton<SignalExample>::GetInstance(); Test* s4 = Singleton<Test>::GetInstance(); Test* s3 = Singleton<Test>::GetInstance(); s->print(); s1->print(); s2->print(); s3->print(); s4->print(); return 0; }
#ifndef _SINGLETON_H_ #define _SINGLETON_H_ template < typename T > class Singleton { static T* c_instance; public: static T* GetInstance(); }; template < typename T > T* Singleton<T>::c_instance = NULL; template < typename T > T* Singleton<T>::GetInstance() { if(c_instance == NULL) { c_instance = new T(); } return c_instance; } #endif
C++单例模式
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。