拷貝建構函式為什麼要用引用?

2021-10-25 05:06:46 字數 1033 閱讀 1133

一、引用

1.概念

引用不是新定義乙個變數,而是給已經存在的變數取了個別名,編譯器不會為引用開闢記憶體空間,它和它引用的變數共用同一塊記憶體空間。

2.和指標區別

引用在定義時必須初始化,指標沒有要求

引用在初始化時引用乙個實體後,就不能再引用其他實體,而指標可以在任何時候指向任何乙個同型別實體

沒有null引用,但有null指標

引用自加即引用的實體增加1,指標自加即指標向後偏移乙個型別的大小

有多級指標,但是沒有多級引用

訪問實體方式不同,指標需要顯式解引用,引用編譯器自己處理

引用比指標使用起來相對更安全

二、拷貝建構函式

1.特徵

拷貝建構函式是建構函式的乙個過載形式

class

string

string

(const string& s)

:_str

(new

char

[strlen

(s._str)+1

])~string()

private

:char

* _str;

};

2.使用

int

main()

3.原因(這裡用日期類進行舉例)

拷貝建構函式的const date d會對原來的d1進行例項化,呼叫自身,但被呼叫後又例項化,再次呼叫拷貝建構函式,形成無限遞迴,所以只能引用原來的d2

拷貝建構函式為什麼要用引用傳參?

拷貝建構函式是類的六個預設成員函式之一,他是建構函式的乙個過載形式,其引數只有乙個且必須要引用傳遞,那我們不禁想問值傳遞可以嘛?下面是乙個拷貝建構函式的 讓我們來分析下 date const date d intmain 當用已存在的物件建立新物件時候,編譯器會自動呼叫拷貝建構函式完成新物件的初始化...

拷貝建構函式的引數為什麼是引用

在c 中,建構函式,拷貝建構函式,析構函式和賦值函式 賦值運算子過載 是最基本不過的需要掌握的知識。但是如果我問你 拷貝建構函式的引數為什麼必須使用引用型別?這個問題,你會怎麼回答?或許你會回答為了減少一次記憶體拷貝?很慚愧的是,我的第一感覺也是這麼回答。不好還好,我有理性這個好品質。思索一下以後,...

拷貝建構函式的引數為什麼必須是引用?

1 include2 include 3using namespace std 4class foo5 13 foo foo f ss f.ss 1417 foo operator const foo f1 1822 void test foo f2 2326 27 28int main 29 如果...