老規矩:記錄細節,等待空余,再進行整理。
?
1:const,static,const static成員初始化。
1、const成員:只能在構造函數后的初始化列表中初始化
2、static成員:初始化在類外,且不加static修飾。
3、const static成員:類只有唯一一份拷貝,且數值不能改變。因此,可以在類中聲明處初始化,也可以像static在類外初始化。
2:拷貝賦值函數 ?和 拷貝構造函數。
1,拷貝賦值函數.
1)返回值是 左側類型的引用。
2,拷貝構造函數。
1,通常的主體功能應該為:復制所有非static的類成員。
2,系統會默認構造。但盡量自行完成(除非類復制很簡單)。
3,參數必須為引用。否則會導致遞歸調用,最終崩潰。
3,拷貝賦值函數 ?和?拷貝構造函數 是相互需要的。即:如果需要定義拷貝賦值函數就必須定義拷貝構造函數。反之亦然。
3:explicit關鍵字。
1,標識此關鍵字的構造函數,必須顯示使用。無法隱式調用。
4:析構函數。
1,析構函數函數體內并不進行類成員的銷毀。而是當析構函數體完成后,再銷毀成員。
2,對于指針,銷毀功能僅銷毀指針本身,并不銷毀指針指向的對象。所以,需要在析構函數中對指針進行delete/free
3,在原則上,一個類擁有析構函數,那就應該也擁有自己的拷貝構造函數和拷貝賦值函數。
5:移動函數。
1,分為移動函數 和 移動賦值函數。
2,移動函數(包括賦值)特點:“偷竊”源對象的數據。會導致源對象進入一種不可預測的情況。
3,移動函數的使用會提升運行效率。但需要注意,如果“偷竊”數據后的對象,依然會被其他線程和函數引用,會導致不可預測的錯誤。