一般來說,程式退出的時候,所有的資源都被**,但是在使用檢測記憶體洩露的工具比如valgrind時會被檢測出來,可以理解為這是一種「假的記憶體洩漏」。為此,這裡分別使用三種方法來避免這個問題。
**實現:
1 #include
2 using std:
:cout;
3 using std:
:endl;
45 class signalton
61415~
autorelease()
1622}23
};24 public:
25static signalton *
getinstance()
2631
return _pinstance;32}
3334
void
destroy()
3539
40void
print()
const
4144
4546 private:
47signalton()
48~signalton()
4950 private:
51static signalton * _pinstance;
52static signalton _autorelease;53}
;5455//signalton *signalton:: _pinstance=nullptr;//餓漢模式
56 signalton *signalton:
: _pinstance=signalton:
:getinstance()
;//飽漢模式
5758 signalton signalton:
: _autorelease;
5960
intmain()
61
功能:註冊終止函式,即main函式結束之後呼叫。#include
intatexit
(void
(*function)
(void))
;
用法:接受乙個無參的函式。exit呼叫這些註冊函式的順序與它們登記時候的順序相反。同乙個函 數如若登記多次,則也會被呼叫多次。
**實現:
1 #include
2 #include
3 using std:
:cout;
4 using std:
:endl;
56 class signalton
716return _pinstance;17}
1819
static
void
destroy()
2024
25void
print()
const
2629
3031 private:
32signalton()
33~signalton()
3435 private:
36static signalton * _pinstance;37}
;3839//signalton *signalton:: _pinstance=nullptr;//餓漢模式
40 signalton *signalton:
: _pinstance=signalton:
:getinstance()
;//飽漢模式
4142
intmain()
43
功能:本函式使用初值為pthread_once_init的once_control變數保證init_routine()函式在多執行緒執行序列中僅執行一次。使用該函式保證了多執行緒安全。#include
intpthread_once
(pthread_once_t *once_control,
void
(*init_routine)
(void
));
前兩種方法都是可以跨平台的,第三種方法具有平台相關性。1 #include
2 #include
3 #include
4 using std:
:cout;
5 using std:
:endl;
67 class signalton
815//init若不被宣告為靜態型別,則第乙個引數為this指標,便不滿足pthread_once傳入無參函式的要求
16static
void
init()
1721
22static
void
destroy()
2327
28void
print()
const
2932
3334 private:
35signalton()
36~signalton()
3738 private:
39static signalton * _pinstance;
40static pthread_once_t _once;41}
;4243//signalton *signalton:: _pinstance=nullptr;//餓漢模式
44 signalton *signalton:
: _pinstance=nullptr;
//飽漢模式
45 pthread_once_t signalton:
:_once=pthread_once_init;
4647
intmain()
48
c 單例模式的自動釋放問題
1.巢狀類 靜態物件 include using std cout using std endl class singleton return pinstance private class autorelease autorelease private singleton singleton pr...
C 基礎之單例模式自動釋放
個人學習筆記 之前的介紹過關於單例模式的例子,其中物件是由 pinstance指標來儲存,通過new建立的物件並沒有進行釋放,是因為單例模式之後沒有其他 需要執行,程式會立馬結束,作業系統會自行 相關資源,但對於後面有相關 需要執行的程式來說,這種操作就會造成記憶體洩漏。有沒有什麼方式可以讓物件自動...
單例模式的記憶體釋放
單例模式前面已經說過了,下面說說單例模式的私有靜態成員 singleton的釋放 如果在類的析構行為中有必須的操作,比如關閉檔案,釋放外部資源,那麼上面所示的 無法實現這個要求。我們需要一種方法,正常地刪除該例項。可以在程式結束時呼叫getinstance並對返回的指標呼叫delete操作。這樣做可...