C 參考 拷貝建構函式的引數必須是引用型別

2022-04-10 13:34:58 字數 932 閱讀 3567

在c++中, 建構函式,拷貝建構函式,析構函式和賦值函式(賦值運算子過載)是最基本不過的需要掌握的知識。在effective c++中說過這麼一點:拷貝建構函式的引數必須是引用型別的。但是為什麼呢?

拷貝建構函式的引數必須是引用型別的

如果拷貝建構函式中的引數不是乙個引用,即形如cclass(const cclass c_class),那麼就相當於採用了傳值的方式(pass-by-value),而傳值的方式會呼叫該類的拷貝建構函式,從而造成無窮遞迴地呼叫拷貝建構函式。因此拷貝建構函式的引數必須是乙個引用。

需要澄清的是,傳指標其實也是傳值,如果上面的拷貝建構函式寫成cclass(const cclass* c_class),是可以執行的。但是引數變指標後,已經不是拷貝建構函式了,已經變成了普通的建構函式,程式不會在需要拷貝建構函式的時候自動呼叫它。

看下面的**:

#includeusing namespace std;

class cexample

a(const a& other) //建構函式過載

;customer::customer(const customer& rhs):name(rhs.name)

customer& customer::operator=(const customer& rhs)

class prioritycustomer:public customer ;

prioritycustomer::prioritycustomer(const prioritycustomer& rhs):customer(rhs),priority(rhs.priority)

prioritycustomer& prioritycustomer::operator=(const prioritycustomer& rhs)

c++私有成員變數的理解

拷貝建構函式的引數型別必須是引用

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

拷貝建構函式的引數型別必須是引用

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

拷貝建構函式的引數型別必須是引用

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