Singleton单例模式C++

单例模式好几种

此处参考如下两人学习https://blog.csdn.net/cjbct/article/details/79266057

                                       https://blog.csdn.net/liang19890820/article/details/61615495

代码部分参考如上,实现过程如下,基础知识内容有所借鉴

单例类只能有一个实例

只允许自己创建自己

提供这个实例给其他所有对象

容易出错位置;线程安全、创建时内存问题、拷贝构造函数的处理

所以产生处理如下几种不错的解决方案

/**********************************************************************************************************************/

可以生成无数个指向同一地址的指针。 只能拷贝对象的地址

#pragma once
//singlentonehan.h
#ifndef SINGLENTONEHAN_H
#define SINGLENTONEHAN_H
/*
饿汉式
即类产生的时候就创建好实例对象,这是一种空间换时间的方式
线程安全
*/
#include <iostream>

using namespace std;

class Singlentonehan
{
public:
	static Singlentonehan* GetInstanceehan();
	
private:
	Singlentonehan();
	~Singlentonehan();
	Singlentonehan(const Singlentonehan&);
	Singlentonehan& operator=(const Singlentonehan&);
	
};

Singlentonehan* Singlentonehan::GetInstanceehan()
{
	static Singlentonehan instanceehan;//局部静态变量
	return &instanceehan;
}

Singlentonehan::Singlentonehan()
{
	cout << "创建Singlentonehan" << endl;
}

Singlentonehan::~Singlentonehan()
{
	cout << "析构Singlentonehan" << endl;
}


#endif // !SINGLENTONLANHAN_H


#include <iostream>
#include "singletonehan.h"

using namespace std;

int main()
{
	Singlentonehan *s1 = Singlentonehan::GetInstanceehan();
	Singlentonehan *s2 = Singlentonehan::GetInstanceehan();
	cout << s1<< endl;
	cout << s2<< endl;
	system("pause");
	return 0;
}

/*******************************************************************************************************************************/

采用是引用,使用时注意不能拷贝

#pragma once
//singlentonehan.h
#ifndef SINGLENTONEHAN_H
#define SINGLENTONEHAN_H
/*
饿汉式
即类产生的时候就创建好实例对象,这是一种空间换时间的方式
线程安全
*/
#include <iostream>

using namespace std;

class Singlentonehan
{
public:
	static Singlentonehan& GetInstanceehan();
	
private:
	Singlentonehan();
	~Singlentonehan();
	Singlentonehan(const Singlentonehan&);
	Singlentonehan& operator=(const Singlentonehan&);
	
};

Singlentonehan& Singlentonehan::GetInstanceehan()
{
	static Singlentonehan instanceehan;//局部静态变量
	return instanceehan;
}

Singlentonehan::Singlentonehan()
{
	cout << "创建Singlentonehan" << endl;
}

Singlentonehan::~Singlentonehan()
{
	cout << "析构Singlentonehan" << endl;
}


#endif // !SINGLENTONLANHAN_H


#include <iostream>
#include "singletonehan.h"

using namespace std;

int main()
{
	Singlentonehan::GetInstanceehan();
	Singlentonehan::GetInstanceehan();

	system("pause");
	return 0;
}

/*******************************************************************************************************************************/

多线程和静态成员方法还未尝试

猜你喜欢

转载自blog.csdn.net/qq_38753888/article/details/85465052