最近更新于 2024-05-05 14:18
环境
Debian 11(arm64)
编译器 g++ 10.2.1;编译标准 C++20;参数:-std=c++20 -no-pie -Wall -Werror=return-type -Werror=non-virtual-dtor -Werror=address -Werror=sequence-point -Werror=format-security -Wextra -pedantic -Wimplicit-fallthrough -Wsequence-point -Wswitch-unreachable -Wswitch-enum -Wstringop-truncation -Wbool-compare -Wtautological-compare -Wfloat-equal -Wshadow=global -Wpointer-arith -Wpointer-compare -Wcast-align -Wcast-qual -Wwrite-strings -Wdangling-else -Wlogical-op -Wconversion -g -O0
单例模式
模板
在这种设计模式下,一个类只有一个实例。一般的实现方法是将构造函数和析构函数设置为私有,同时禁用拷贝和赋值。类中定义一个静态变量用于储存类的实例,它将不依赖于具体对象,静态变量只初始化一次,将作为唯一的实例,另外定义一个静态成员函数用于获取这个实例。
class Singleton
{
public:
static Singleton &getInstance()
{
static Singleton instance;
return instance;
}
private:
// 禁止拷贝和赋值
Singleton(const Singleton &) = delete;
Singleton &operator=(const Singleton &) = delete;
Singleton() {} // 构造函数
~Singleton() {} // 析构函数
};
示例
先获取一个实例,对它存入信息,再获取一个实例,取出来的信息依然是第一次获取的实例存入的信息
#include <iostream>
class Singleton
{
public:
static Singleton &getInstance()
{
static Singleton instance;
return instance;
}
void set(std::string name, int age)
{
m_name = name;
m_age = age;
}
void print()
{
std::cout << m_name << " " << m_age << std::endl;
}
private:
Singleton(const Singleton &) = delete;
Singleton &operator=(const Singleton &) = delete;
Singleton() {}
~Singleton() {}
std::string m_name;
int m_age;
};
int main()
{
Singleton &s1 = Singleton::getInstance();
s1.set("小明", 20);
Singleton &s2 = Singleton::getInstance();
s2.print();
}
C++ 单例模式