c++ String 類之深淺拷貝
阿新 • • 發佈:2018-12-09
一、string類的實現:存放字串的指標、建構函式、拷貝建構函式、解構函式、賦值運算子過載
1、無引數的建構函式
給陣列初始化成,分配一個char空間存放‘\0’
2、帶引數的建構函式
分配一個和傳進來的引數多一的空間用來存放‘\0’,然後初始化時進行復制。
3、帶預設值的建構函式(用這個更好,不用考慮為空,都初始化成 "")
4、拷貝構造(淺拷貝、不採取)
吧傳入的引用引數的指標指向的位置拷貝給自己的指標。相當於兩個指標指向同一塊空間。
注意:這樣在析構的時候,這塊空間會被釋放兩次,造成程式崩潰
5、拷貝構造(深拷貝)
6、拷貝構造(新方法)
先構造一箇中間物件,讓後呼叫swap函式和自己調換
7、賦值運算子過載
方法1、
方法2、
沒有考慮空間申請失敗,方法1 在空間申請失敗時不會影響本身的資料,方法2中空間開闢失敗後,自身也被delete。
方法3、
初始化一個物件,然後交換賦值。
方法4、(簡潔)
直接交換引數。
8、解構函式
二、string類實現之寫時拷貝
可以用一個靜態的變數來計數,也可以用一塊計數指標