首页 > 编程语言 > 详细

C++单例模式

时间:2017-04-15 17:09:32      阅读:300      评论:0      收藏:0      [点我收藏+]

技术分享

技术分享

技术分享

#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++单例模式

原文:http://www.cnblogs.com/sunxiaolongblog/p/6714684.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!