目錄**2.0
#include class base
~base()
void printid()
static base* getbase()
};base base::__self{}; //不能用小括號方式初始化 base base::__self();
int main()
執行結果base init
main init
id : 0
base destory
若沒有base base::__self{};
,靜態成員變數未初始化, 鏈結時報錯:/tmp/cc0f7qmx.o: in function `base::getbase()':
main.cpp:(.text._zn4base7getbaseev[_zn4base7getbaseev]+0x7): undefined reference to `base::__self'
collect2: error: ld returned 1 exit status
若將base base::__self{};
改成base base::__self();
則報錯:main.cpp:22:19: error: no 『base base::__self()』 member function declared in class 『base』
base base::__self();
^
若把析構和構造都放在private區域,行為正常。#include class base
public:
~base()
void printid()
static base* getbase()
};base* base::__self = new base();
//base base::__self;
int main()
__self 改為指標實現
delete base::getbase();
釋放空間。若沒有這條語句,則析構不會被呼叫。
建構函式可以放在private 區域,析構不行。
C static靜態成員變數
有時候我們希望在多個物件之間共享資料,物件 a 改變了某資料後物件 b 可以檢測到。共享資料的典型使用場景是計數 以 student 類為例,如果我們想知道班級中共有多少名學生,就可以設定乙份共享的變數,每次建立物件時讓該變數加 1 在c 中,我們可以使用靜態成員變數來實現多個物件共享資料的目標。靜...
C static靜態成員變數詳解
class student 物件的記憶體中包含了成員變數,不同的物件占用不同的記憶體 已在 c 物件的記憶體模型 中提到 這使得不同物件的成員變數相互獨立,它們的值不受其他物件的影響。例如有兩個相同型別的物件 a b,它們都有乙個成員變數 m name,那麼修改 a.m name 的值不會影響 b....
C static 資料成員
static 資料成員可以宣告為任意型別,可以是常量 引用 陣列 類型別,等等。static 資料成員必須在類定義體的外部定義 類的內部為宣告 不像普通資料成員,static 成員不是通過類建構函式進行初始化,而是應該在定義時進行初始化。定義 static 資料成員的方式與定義其他類成員和變數的方式...