c 單例模式的自動釋放問題

2021-10-10 04:02:07 字數 1743 閱讀 1443

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...