单例模式好几种
此处参考如下两人学习;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;
}
/*******************************************************************************************************************************/
多线程和静态成员方法还未尝试