位拷貝 值拷貝 淺拷貝 深拷貝

2021-07-16 10:24:15 字數 372 閱讀 1374

位拷貝拷貝

的是位址(也叫淺拷貝),而

值拷貝則拷貝的是內容(也叫深拷貝)。

如果不主動編寫拷貝建構函式和賦值函式,編譯器將以「位拷貝」的方式自動生成預設的函式

現將 a賦給 b,預設賦值函式的「位拷貝」意味著執行 b.m_data = a.m_data。這將造成三個錯誤:

一是 b.m_data 原有的記憶體沒被釋放,造成記憶體洩露;

二是b.m_data 和 a.m_data 指向同一塊記憶體,a 或 b 任何一方變動都會影響另一方;

三是在物件被析構時,m_data被釋放了兩次。 

深拷貝:先申請記憶體,然後把值拷貝過來。

string::string(const string &other) 

位拷貝 淺拷貝 值拷貝 深拷貝

首先定義string類,而並不實現其成員函式。class string 位拷貝拷貝的是位址,而值拷貝則拷貝的是內容。如果定義兩個string物件a和b。a.m data和b.m data分別指向一段區域,a.m data windows b.m data linux 如果未重寫賦值函式,將b賦給a ...

淺拷貝 深拷貝

copy mutablecopy copy 不管是可變的,還是不可變的,結果都是不可變的 mutablecopy 不管是不可變的,還是可變的,結果都是可變的 nsmutablestring str nsmutablestring stringwithformat a nsarray arr1 str...

深拷貝 淺拷貝

c 中物件的複製就如同 轉殖 用乙個已有的物件快速地複製出多個完全相同的物件。一般而言,以下三種情況都會使用到物件的複製 1 建立乙個新物件,並用另乙個同類的已有物件對新物件進行初始化,例如 cpp view plain copy class rect rect rect1 rect rect2 r...