拷貝建構函式 過載 操作符的區別 深拷貝

2021-09-18 03:04:00 字數 940 閱讀 5509

#define _crt_secure_no_warnings

#include"iostream"

using namespace std;

/* 如果要考慮深拷貝問題,必須寫拷貝建構函式和過載=操作符函式

深拷貝原則:

1.判斷原記憶體空間是否為空,不為空則釋放掉

2.分配新的記憶體空間

3.拷貝

呼叫拷貝建構函式: 用物件初始化(定義的同時賦值)另乙個物件時

呼叫過載=操作符函式: 用乙個物件賦值給另乙個物件(可能已經初始化,預設或者有參建構函式)時,

*/class test08

test08(char* name)

test08(const test08& obj)

len = obj.len;

name = (char*)malloc(sizeof(char)*(len + 1));//深拷貝:手動分配記憶體

strcpy(name, obj.name);

cout << "拷貝建構函式" << endl;

} ~test08()

}public:

test08& operator=(const test08& obj)

len = obj.len;

name = (char*)malloc(sizeof(char)*(len + 1));

strcpy(name, obj.name);

cout << "過載=操作符" << endl;

return *this;

} void printt()

protected:

private:

char* name;

int len;

};void objectshow08()

int main()

複製建構函式和賦值操作符 深拷貝,淺拷貝

首先,大家要知道,c 類有以下這些極為重要的函式 一 複製建構函式。二 賦值函式。我們先來講複製建構函式。什麼是複製建構函式呢?比如,我們可以寫下這樣的 string test1 test2 這是進行初始化。我們知道,初始化物件要用建構函式。可這兒呢?按理說,應該有宣告為這樣的建構函式 string...

C 中的拷貝建構函式和賦值操作符過載

在c 中,當乙個類為 空 時,裡面真的為空嗎?不是的,裡面有四個函式。分別是建構函式,析構函式,拷貝建構函式,過載賦值操作符。class test 等價於class test 拷貝建構函式和過載賦值操作符有什麼區別?test t1 test t2 t1 等價於test t2 t1,此時呼叫拷貝建構函...

C 中的賦值操作符過載和拷貝建構函式

1,關於賦值的疑問 1,什麼時候需要過載賦值操作符?2,編譯器是否提供預設的賦值操作符?2,關於賦值的疑問 1,編譯器為每個類預設過載了賦值操作符 1,意味著同型別的類物件可以相互賦值 2,預設的賦值操作符僅完成淺拷貝 3,當需要進行深拷貝時必須過載賦值操作符 1,和拷貝建構函式相同 4,賦值操作符...