C++ 的靜態成員變數為什麼一定要在類外定義
C++ 的靜態成員變數為什麼一定要在類外定義
函式如下,在C++中宣告靜態成員變數的時候,在類中只是進行了宣告,並沒有實際的申請出指標的記憶體,真正的記憶體是定義初始化的時候才會進行記憶體的申請,因此,又因為static型別的變數都是隨著類的,因此不能隨著物件的建立而申請記憶體,所以需要單獨的進行類外定義,在定義的時候C++編譯器會申請記憶體給靜態指標。
#include <iostream>
using namespace std;
class Singleton
{
private:
Singleton()
{
cout << "sluggard singleton construct start." << endl;
}
public:
static Singleton *getInstance(void)
{
if(NULL == m_psl) // 懶漢式,每次獲取例項都要判斷,在多執行緒中會存在問題
{
m_psl = new Singleton;
}
return m_psl;
}
static void FreeInstance()
{
if(NULL != m_psl)
{
delete m_psl;
m_psl = NULL;
}
}
private:
static Singleton *m_psl;
};
Singleton *Singleton::m_psl = NULL;
// 懶漢式,只有在使用的時候才會去建立
// 存在的問題,多個執行緒同時首次呼叫時,可能會出現建立多次的問題(導致記憶體洩漏)
int main(int argc, char const *argv[])
{
// 使用功能去全域性獲取介面獲取資源
Singleton *p1 = Singleton::getInstance();
Singleton *p2 = Singleton::getInstance();
if(p1 == p2)
{
cout << "p1 equal p2" << endl;
}
else
{
cout << "p1 not equal p2" << endl;
}
// 手動釋放單例模式建立的唯一一個物件
Singleton::FreeInstance();
cout << "singleton." << endl;
return 0;
}
相關文章
- 類的靜態成員變數和普通成員變數該怎樣去區別定義變數
- C++類的靜態成員變數初始化C++變數
- c++類的靜態成員C++
- C++:類的靜態成員C++
- C++類中的常成員和靜態成員C++
- 為什麼類裡面要定義靜態常量啊?
- C++學習筆記(三):類與物件--靜態成員變數與常成員函式C++筆記物件變數函式
- c++中的靜態成員C++
- C++ 定義靜態成員 static 關鍵字不能在定義出重複出現C++
- C++ 類方法解析:內外定義、引數、訪問控制與靜態方法詳解C++
- C++類內成員變數可以定義引用型別嗎C++變數型別
- C++ 靜態資料成員C++
- 成員變數、全域性變數、例項變數、類變數、靜態變數和區域性變數的區別變數
- 類內的靜態成員函式函式
- C++ 靜態變數什麼時候完成初始化C++變數
- 【C++】靜態持續變數?如何建立靜態持續變數?C++變數
- oop類的繼承與類靜態成員學習OOP繼承
- Java中變數之區域性變數、本類成員變數、父類成員變數的訪問方法Java變數
- C++教程-----C++變數型別和變數的定義C++變數型別
- 類成員變數的初始化變數
- c#物件導向- 靜態成員和非靜態成員的區別C#物件
- C#快速入門教程(3)——類的靜態成員和例項成員C#
- c++成員變數初始化C++變數
- 子父類中成員變數變數
- javascript:私有變數 (靜態私有變數為什麼會被所以例項共享?-答疑解惑)JavaScript變數
- 內部類中的成員的定義和使用
- Python中類變數、成員變數、區域性變數的區別Python變數
- TypeScript 中 class 的例項成員與靜態成員TypeScript
- 靜態變數變數
- c++語言中類的私有型別或保護型別成員變數C++型別變數
- [C++]變數宣告與定義的規則C++變數
- C++:類的成員函式C++函式
- Spring如何為靜態變數注入值Spring變數
- 類的成員變數的初始化順序變數
- 成員變數變數
- ConcurrentHashMap(一):常量,成員變數,靜態程式碼塊,內部類,spread函式,tabAt函式等詳解HashMap變數函式BAT
- 對於靜態成員來說是類的建構函式,對於例項成員是類的原型物件。函式原型物件
- react中什麼使用定義變數,需要使用useRef,什麼時候直接定義即可?React變數