C 筆記(八)建構函式與析構函式

2021-09-29 20:35:45 字數 1826 閱讀 6408

**中的mystring類包含乙個指標成員,他指向動態分配的記憶體。複製這個類的物件時,將複製其指標成員,但不會複製指標指向的緩衝區,其結果會造成兩個物件指向同一塊記憶體區,這稱為淺複製,會威脅程式的穩定性。

#include

using

namespace std;

class

mystring

else}~

mystring()

}int

getlnegth()

const

char

*getstring()

};void

usestring

(mystring s)

intmain()

複製建構函式在物件被複製(包括物件按值傳遞給函式)時被編譯器呼叫。

申明語法如下:

#include

using

namespace std;

class

mystring

else

}mystring

(const mystring& copysource)

else}~

mystring()

}int

getlnegth()

const

char

*getstring()

};void

usestring

(mystring s)

intmain()

輸出:buffer points to :

0x013d9e20

複製構造函式呼叫

buffer points to :

0x013d9520

12this is string one

析構函式呼叫

析構函式呼叫

請按任意鍵繼續.

..

兩個buffer的位址分別是0x013d9e200x013d9520,確認是深複製。

類包含原始指標成員時,務必編寫複製建構函式和複製賦值運算子;

編寫複製建構函式時,務必接受源物件的引數申明為const引用;

在需要多次呼叫複製建構函式來傳值時,編譯器嚴格呼叫複製建構函式反而降低了效能,為了避免這種效能瓶頸,可使用移動建構函式,語法如下:

mystring (mystring && movesource)

}

通過私有的複製建構函式,確保類物件不能作為引數被複製,只需將函式宣告為私有的,無需實現。

class

present

私有建構函式,私有賦值運算子,靜態例項成員

#include

# include

using

namespace std;

class

present

;present

(const present&);

const present&

operator=(

const present&);

string name;

public

:static present&

getinstantance()

string getname()

void

stename

(string s)};

intmain()

C 筆記 建構函式與析構函式

建構函式 宣告類的物件時,該類的建構函式會自動被呼叫 作用 建構函式是用於初始化類的成員變數 析構函式 在類物件被銷毀時,自動呼叫,呼叫順序與建構函式相反 作用 做善後清理工作 class person person person person person const string name,co...

c 建構函式與析構函式

一 建構函式 c 提供建構函式來處理物件的初始化,建構函式是一種特殊的成員函式,與其他的成員函式不同,不需要使用者來呼叫他,而是在建立物件時自動執行。它的特點是 函式名和類名相同,沒有返回值,可以過載 如果程式中未宣告,則系統自動產生出乙個預設的建構函式,預設的建構函式時不帶引數的。比如 stude...

C 建構函式與析構函式

c 規定,每個類必須有預設的建構函式,沒有建構函式就不能建立物件。若沒有提供任何建構函式,那麼c 提供自動提供乙個預設的建構函式,該預設建構函式是乙個沒有引數的建構函式,它僅僅負責建立物件而不做任何賦值操作。只要類中提供了任意乙個建構函式,那麼c 就不再自動提供預設建構函式。類物件的定義和變數的定義...