1. 程式人生 > >c++ String 類之深淺拷貝

c++ String 類之深淺拷貝

一、string類的實現:存放字串的指標、建構函式、拷貝建構函式、解構函式、賦值運算子過載

1、無引數的建構函式

 給陣列初始化成,分配一個char空間存放‘\0’

2、帶引數的建構函式

分配一個和傳進來的引數多一的空間用來存放‘\0’,然後初始化時進行復制。

3、帶預設值的建構函式(用這個更好,不用考慮為空,都初始化成 "")

4、拷貝構造(淺拷貝、不採取)

 吧傳入的引用引數的指標指向的位置拷貝給自己的指標。相當於兩個指標指向同一塊空間。

注意:這樣在析構的時候,這塊空間會被釋放兩次,造成程式崩潰

5、拷貝構造(深拷貝)

 給自己開闢一個和引用引數多一的空間,然後用strcpy函式,吧引數的_str拷貝給自己的,所以兩個指標指向不同的記憶體。

6、拷貝構造(新方法)

 先構造一箇中間物件,讓後呼叫swap函式和自己調換

7、賦值運算子過載

方法1、

 

方法2、

  沒有考慮空間申請失敗,方法1 在空間申請失敗時不會影響本身的資料,方法2中空間開闢失敗後,自身也被delete。

方法3、

  初始化一個物件,然後交換賦值。

方法4、(簡潔)

  直接交換引數。

 

8、解構函式

 

二、string類實現之寫時拷貝

可以用一個靜態的變數來計數,也可以用一塊計數指標