拷貝建構函式生成新的類物件,而賦值運算子是給已有的物件重新賦值。
由於拷貝建構函式是直接構造乙個新的類物件,所以在初始化這個物件之前不用檢驗源物件是否和新物件相同。而賦值運算子則需要這個操作,另外賦值運算中如果原來的物件中已有記憶體分配要先把記憶體釋放掉。
*注意:當類中有指標型別的成員變數時,一定要重寫拷貝建構函式和賦值運算發,不要使用預設的。
//copy constructor 宣告
string(const
string&);
//assign operator 宣告
string& operator=(const
string&rhs);
//拷貝建構函式的實現
string::string(const
string&another)
//賦值運算
string&
string::operator=(const
string&rhs)
對於拷貝建構函式的實現要確保以下幾點:
摘自: ,
拷貝建構函式和賦值運算子
把引數傳遞給函式有三種方法,一種是值傳遞,一種是傳位址,還有一種是傳引用。前者與後兩者不同的地方在於 當使用值傳遞的時候,會在函式裡面生成傳遞引數的乙個副本,這個副本的內容是按位從原始引數那裡複製過來的,兩者的內容是相同的。當原始引數是乙個類的物件時,它也會產生乙個物件的副本,不過在這裡要注意。一般...
拷貝建構函式和賦值運算子
來自 本文主要介紹了拷貝建構函式和賦值運算子的區別,以及在什麼時候呼叫拷貝建構函式 什麼情況下呼叫賦值運算子。最後,簡單的分析了下深拷貝和淺拷貝的問題。在預設情況下 使用者沒有定義,但是也沒有顯式的刪除 編譯器會自動的隱式生成乙個拷貝建構函式和賦值運算子。但使用者可以使用delete來指定不生成拷貝...
拷貝建構函式和賦值運算子區別
只有在賦值時,才呼叫賦值函式,當在宣告變數時,b b3 b1和b b4 b3 呼叫的函式是一樣的,均為拷貝建構函式。一 拷貝構造,是乙個的物件來初始化一邊記憶體區域,這邊記憶體區域就是你的新物件的記憶體區域賦值運算,對於乙個已經被初始化的物件來進行operator 操作 class a a a a ...