本文章詳細的介紹了關於php中拷貝建構函式、賦值運算子多載詳解,有需要瞭解的同學可參考一下下哦。
對象的賦值與複製: 賦值:通過“ = ”運算子多載
| 代碼如下 |
複製代碼 |
User a(10),b; b = a; 複製:調用複製建構函式 User b; User a(b); 或者 User a = b;//相當於User a(b); |
與賦值的區別,賦值是對一個已經存在的對象進行賦值(已經實現定義了被賦值的對象),而複製是從無到有建立一個新的對象,並使它與已有的對象相同。
淺複製與深複製: 若對象中有指標成員,在複製時,只會將該指標成員的地址複製給建立立的對象,因此,兩個對象中的指標成員都指向了同一塊記憶體地區,在釋放時會出現重複釋放的問題。 需要手動定義複製建構函式,在建構函式中將為指標變數分配新的記憶體,是不同對象的指標成員指向不同的記憶體地區。
用到拷貝建構函式的三種情況: 1、需要建立一個新對象,並用另一個同類對象對其進行初始化 2、函數的參數為類的對象時,在調用函數時需要建立一個實參的拷貝,按實參複製一個形參,系統是通過調用拷貝建構函式實現的 3、函數的傳回值是類的對象:函數調用結束時,需要將函數中的對象複製一個臨時對象,並傳給該函數的調用處。
| 代碼如下 |
複製代碼 |
User getUser() { User temp; return temp; } int main() { User user = getUser();//調用getUser(); } |
getUser()函數調用結束時,getUser中建立的對象temp的生命週期結束(即將銷毀),所以不是將temp帶回main,而是在執行return語句時,調用User類的拷貝建構函式,按temp拷貝一個新的、對象,然後將它賦值給user.
http://www.bkjia.com/PHPjc/629095.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/629095.htmlTechArticle本文章詳細的介紹了關於php中拷貝建構函式、賦值運算子多載詳解,有需要瞭解的同學可參考一下下哦。 對象的賦值與複製: 賦值:通過...