实现方式:
首先,将类的构造函数、拷贝构造函数设为私有属性,则无法在类外通过new
生成该类对象。
然后,提供一个获取类唯一实例的公有接口,外部只能通过该接口获得该类的实例化对象。
最后,在该公有接口中通过静态变量,确保该类只实例化了一次。
优点:
通过单例模式,可以实现类之间的数据传输,而不必写各类两两之间的通信接口,降低了代码的复杂度。
缺点:
单例模式的实现有多种模式,本文示范的代码并没有考虑多线程情况,在多线程下可能会生成多份实例。后续会将改进的单例模式更新在下方。
// Singleton.hpp
#include <iostream>
using namespace std;// 日志单件类
class LogSingleton {
public:// 对外提供获取唯一实例的接口static LogSingleton* Instance() {if (NULL == m_pInstance) {// 只第一次调用此接口时创建实例化对象m_pInstance = new LogSingleton();}return m_pInstance;}// 展示当前日志void Look() {printf("%sn", strLog.c_str());}// 写入日志void Write(string strNew) {strLog += strNew;}// 内存回收~LogSingleton() {if (NULL != m_pInstance) {delete m_pInstance;m_pInstance = NULL;}}private:// 将构造、拷贝构造函数设为私有LogSingleton() {}LogSingleton(LogSingleton& oLog) {}static LogSingleton* m_pInstance; // 指向唯一实例的指针string strLog;
};// 记得将static指针初始化
LogSingleton* LogSingleton::m_pInstance = NULL;
#include "Singleton.hpp"
int main()
{LogSingleton* pUserA = LogSingleton::Instance();pUserA->Write("Hello");LogSingleton* pUserB = LogSingleton::Instance();pUserB->Look();return 0;
}
Hello
本文发布于:2024-02-02 21:58:52,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/170688233246710.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |