前言
单例模式估计是校招考的最多的了,没想到此刻还在复习单例模式。
单例模式(Singleton):保证一个类仅有一个实例,并提供一个访问它的全局访问点。
代码
单线程时的单例
Singleton.h
懒汉式
#ifndef SINGLETON_H
#define SINGLETON_H
class Singleton {
private:
static Singleton *instance;
Singleton() {};
~Singleton() = default;
Singleton(const Singleton &) = delete;
Singleton &operator=(const Singleton &) = delete;
public:
static Singleton *getInstance() {
if (instance == nullptr) {
instance = new Singleton();
}
return instance;
}
};
Singleton *Singleton::instance = nullptr;
#endif //SINGLETON_H
main.cpp
#include <iostream>
#include "Singleton.h"
using namespace std;
int main() {
Singleton* s1 = Singleton::getInstance();
Singleton* s2 = Singleton::getInstance();
if (s1 == s2) {
cout<<"两个对象是相同的实例";
}
return 0;
}
多线程时的单例
在C++11内部静态变量的方式里是线程安全的,只创建了一次实例。
Singleton.h
#ifndef SINGLETON_H
#define SINGLETON_H
class Singleton {
private:
Singleton() {};
~Singleton() = default;
Singleton(const Singleton &) = default;
Singleton &operator=(const Singleton &) = delete;
public:
int para{};
static Singleton &getInstance() {
static Singleton singleton;
return singleton;
}
};
#endif //SINGLETON_H
main.cpp
#include <iostream>
#include "Singleton.h"
using namespace std;
int main() {
Singleton::getInstance().para = 5;
cout<<Singleton::getInstance().para<<endl;
cout<<Singleton::getInstance().para<<endl;
return 0;
}