1.巢狀類+靜態物件
#include
using std::cout;
using std::endl;
class
singleton
return _pinstance;
}private
:class
autorelease
~autorelease()
}};private
:singleton()
~singleton()
private
:static singleton * _pinstance;
static autorelease _ar;};
//飽(懶)漢模式 --> 懶載入(lazy )
//singleton * singleton::_pinstance = nullptr;
//餓漢模式 可以解決執行緒安全的問題
singleton * singleton::_pinstance =
getinstance()
;singleton::autorelease singleton::_ar;
intmain
(void
)
2.atexit+destroy#include
//atexit()在此標頭檔案中
#include
using std::cout;
using std::endl;
class
singleton
return _pinstance;
}static
void
destroy()
private
:singleton()
~singleton()
private
:static singleton * _pinstance;};
//飽(懶)漢模式 --> 懶載入(lazy )
//singleton * singleton::_pinstance = nullptr;
//餓漢模式 可以解決執行緒安全的問題
singleton * singleton::_pinstance =
getinstance()
;
3.pthread_once + atexit#include
#include
//posix標準的執行緒庫,只適用於unix平台,推薦此種用法,一定是執行緒安全的
#include
using std::cout;
using std::endl;
class
singleton
static
void
init()
static
void
destroy()
private
:singleton()
~singleton()
private
:static singleton * _pinstance;
static pthread_once_t _once;};
singleton * singleton::_pinstance =
nullptr
;//使用懶漢模式即可
pthread_once_t singleton::_once = pthread_once_init;
單例模式的自動釋放
一般來說,程式退出的時候,所有的資源都被 但是在使用檢測記憶體洩露的工具比如valgrind時會被檢測出來,可以理解為這是一種 假的記憶體洩漏 為此,這裡分別使用三種方法來避免這個問題。實現 1 include 2 using std cout 3 using std endl 45 class s...
C 基礎之單例模式自動釋放
個人學習筆記 之前的介紹過關於單例模式的例子,其中物件是由 pinstance指標來儲存,通過new建立的物件並沒有進行釋放,是因為單例模式之後沒有其他 需要執行,程式會立馬結束,作業系統會自行 相關資源,但對於後面有相關 需要執行的程式來說,這種操作就會造成記憶體洩漏。有沒有什麼方式可以讓物件自動...
C 單例模式物件釋放的問題
std mutex resource mutex class mycas 這是乙個單例類 私有化建構函式 private static mycas m instance 靜態成員變數 public static mycas getinstance return m instance class cg...