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

  

 

 

转载于:https://www.cnblogs.com/sunxiaolongblog/p/6714684.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值