複製建構函式2 深入理解

2022-08-28 07:57:11 字數 1348 閱讀 2210

//如果不顯示定義複製建構函式,編譯會出錯,原因是:在建立物件s2時,呼叫預設複製建構函式並用物件s1對其進行初始化,致使s2中指標

//與s1中指標指向同一儲存空間,當乙個物件生命週期結束後呼叫析構函式釋放記憶體空間後,另乙個變數的指標懸空,無法正常使用。

//淺複製

//再用乙個物件初始化另乙個物件時,只複製了成員,沒有複製資源(指堆記憶體 ,資料成員沒有具體值),使兩個物件同時指向同一資源,

//如果不存在資源矛盾,程式可以正常執行

#include

#include

using namespace std;

class student

public:

student(int pid, char *pname, float s);

student(const student& init);

void display();

~student();

private:

int id;

char *name;

float score;

student::student(int pid, char * pname, float s)

id = pid;

name = new char[strlen(pname) + 1];//學會這種表達方式!!

strcpy(name,pname);

score = s;

student::student(const student & init)//理解!!

深入理解各種建構函式

include includeusing namespace std class test else test const test t else test operator const test t pdata new char strlen t.pdata 1 strcpy pdata t.pd...

C 建構函式深入理解

01 初始化引數列表.cpp include include include using namespace std struct student 拷貝建構函式定義 拷貝建構函式的有效引數,必須是該類的物件的引用 if 1 student student s,int class no 1 else ...

深入理解js建構函式

在j ascript中,建立物件的方式包括兩種 物件字面量和使用new表示式。1.1物件字面量是一種靈活方便的書寫方式,例如 var o1 這樣,就用物件字面量建立了乙個物件o1,它具有乙個成員變數p以及乙個成員方法alertp。這種寫法的缺點是 每建立乙個新的物件都需要寫出完整的定義語句,不便於建...