C 之拷貝建構函式和複製運算子過載

2021-08-08 12:09:13 字數 712 閱讀 8260

1、c++拷貝建構函式

拷貝建構函式是為了解決如神明物件時候就用乙個已經存在的物件來初始化這個新的物件,如mystring a(b):這裡b是已經存在mystring物件。但是這裡需要注意拷貝建構函式裡面的內部實現細節。這裡面其實是在這個a物件類的定義中定義了拷貝建構函式的格式如:mystring(const mystring & input).在實現這個函式的時候,如果類中本省存在記憶體分配的話,則需要重新為這個新的物件的指標重新new空間,否則直接複製的會造成兩個指標執行同乙個記憶體,造成物件析構的時候兩次析構造城重複記憶體釋放。

想這樣的表達(mystring a(b)或者mystring a=b),傳引數如(mystring a; func(a),這裡傳入引數a就會發生呼叫拷貝建構函式),還有就是返回值都是呼叫了拷貝建構函式,只不過很多時候系統提供的型別都預設帶有拷貝建構函式。但是這裡面主要mystring a=b這樣宣告並敷值不是呼叫的=號而是呼叫的拷貝建構函式。

而如果寫成這樣

mystring a

a=b //這裡就不是呼叫拷貝建構函式裡,而是呼叫的這個類的=號過載運算子。那麼這個類中就需要實現=號過載運算子。如

class mystring

public:

mysting & operator=(mystring & input)

this->a = input.a;//這裡會用到this指標。

private:

int a;

C 中拷貝(複製)建構函式和賦值運算子過載函式

c 中拷貝建構函式和賦值運算子過載函式何時呼叫?先看下面的程式 include using namespace std class d public d cout 呼叫d的無參建構函式 呼叫d的無參建構函式 呼叫d的拷貝建構函式 輔助函式 呼叫d的拷貝建構函式 呼叫d的析構函式 呼叫d的析構函式 呼...

C 拷貝建構函式和賦值運算子

本文主要介紹了拷貝建構函式和賦值運算子的區別,以及在什麼時候呼叫拷貝建構函式 什麼情況下呼叫賦值運算子。最後,簡單的分析了下深拷貝和淺拷貝的問題。在預設情況下 使用者沒有定義,但是也沒有顯式的刪除 編譯器會自動的隱式生成乙個拷貝建構函式和賦值運算子。但使用者可以使用delete來指定不生成拷貝建構函...

C 拷貝建構函式和賦值運算子

這篇文章主要介紹拷貝建構函式和賦值運算子的區別,以及在什麼時候呼叫拷貝建構函式,什麼情況下呼叫賦值運算子。在預設情況下 使用者沒有定義,但是也沒有顯示的刪除 編譯器會自動隱式生成乙個拷貝建構函式和賦值運算子,但使用者可以使用delete來指定不生成拷貝建構函式和賦值運算子,這樣的物件就不能通過值傳遞...