模板化的單例實現

2022-03-04 01:00:05 字數 891 閱讀 5649

在系統的**中,我們有許多單例。

從[cegui]( 的**中的找到乙個基於模板的類,具體**改變後如下

#ifndef _singleton_h_

#define _singleton_h_

#include #include template class singleton

~singleton()

static t* instance()

private:

singleton& operator=(const singleton&);

singleton(const singleton&);

};template t* singleton::m_inst_ = null;

這個類的使用情況是基於棧上的分配的,作為全域性的變數。 我一直用得挺好的。直到到我遇到了有依賴的全域性變數,在乙個單例中,呼叫另外乙個單例, 可能因為宣告順序問題,引起單例得到的為空。

而且這種實現,與系統中的在堆上分配記憶體不符合,當遇到大物件時,不得不在堆上分配,使用受限。

於是靈光一現,新增了乙個預設引數,出現了如下的模板實現

template class singleton

}~singleton()

static t* instance()

return ( m_inst_ );

}private:

singleton& operator=(const singleton&);

singleton(const singleton&);

};template t* singleton::m_inst_ = null;

這樣就會在不影響實現的情況下,預設情況下就會在堆上分配,但因為每次instance的時候多了判斷。 小問題,可以通過模板特化來實現。

模板單例實現

模板單例實現 本文參考 用模板實現單例模式 用模板實現單例模式 並且在此基礎上做了適當的改進,使其支援更多功能。ifndef singleton h define singleton h template class singletion private singletion virtual sin...

單例銷毀 C 單例模式的模板實現

單例模式是一種建立型的設計模式 creational design patterns 使用單例模式進行設計的類在程式中只擁有乙個例項 single instance 這個類稱為單例類,它會提供乙個全域性的訪問入口 global access point 關於單例模式的討論可以參考singleton ...

乙個模板單例的實現

以前看過高手寫的單例實現,也是利用繼承模板基類來實現,最近正要用到單例模式,卻苦於找不到以前高手的 於是就自己動手實現,如下 templateclass singletion virtual singletion static t pobject 利用此類析構函式釋放單例例項記憶體 class cc...