1. 程式人生 > 其它 >C++——Singleton 單例模式

C++——Singleton 單例模式

轉載來自:https://www.cnblogs.com/ltimaginea/p/15400066.html

什麼是單例模式?

單例模式就是一個類只能被例項化一次 ,更準確的說是只能有一個例項化的物件的類。

實現要點:

建構函式應該宣告為非共有,從而禁止外界創造例項

拷貝操作和移動操作也應該被禁止掉

只能通過Singleton的公有特定類操作訪問它的唯一例項(C++中的一個共有靜態成員函式)

有區域性靜態物件和動態分配兩種實現,C++11起最佳時間的是區域性靜態物件的方法

執行緒安全

程式碼:

DMSingleton.h

#ifndef __DMSINGLETON__H__
#define __DMSINGLETON__H__
class
Singleton { private: Singleton(); Singleton(const Singleton&) {}; // 防止拷貝構造另一個例項 Singleton& operator =(const Singleton&) {}; // 防止賦值構造出另一個例項 ~Singleton(); public: static Singleton* Instance(); static Singleton* m_pSingleton; void Test(); }; #endif
//__DMSINGLETON__H__

DMSingleton.cpp

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

Singleton* Singleton::m_pSingleton = NULL;
Singleton::Singleton()
{
    std::cout << "construction of Singleton.\n";
}
Singleton::~Singleton()
{
    std::cout << "destruction of Singleton.\n";
    
if (m_pSingleton) { delete m_pSingleton; m_pSingleton = NULL; } } void Singleton::Test() { std::cout << "Call Singleton::Test()\n"; } Singleton* Singleton::Instance() { if (NULL == m_pSingleton) { m_pSingleton = new Singleton(); } return m_pSingleton; } int main() { Singleton::Instance()->Test(); Singleton::Instance()->Test(); Singleton::Instance()->Test(); Singleton::Instance()->Test(); }