c 中為什麼複製建構函式的形參必須是乙個引用

2021-08-20 11:08:26 字數 432 閱讀 9250

class

myclass//乙個簡單的類

{};

myclass a

這樣通過myclass 的建構函式建立了乙個myclass的物件,

同樣樣在函式傳參的時候

void

fun(myclass a)

引數a也必須呼叫myclass的建構函式來生成物件,

那麼在乙個類的拷貝建構函式中寫出了這樣形式

class

myclass

拷貝建構函式裡的引數 mc給它乙個非引用,非指標的引數,它一定會呼叫該型別的建構函式。, 那就是呼叫自身,會發生死迴圈導致棧溢位.

但是如果傳遞指標或者引用,那麼就等於傳遞了乙個明確的位址型別,就不會發生呼叫拷貝函式的問題

c 複製建構函式形參為什麼是const引用

使用反證法即可證明。如果使用值傳遞形式構造類的複製建構函式,在使用a初始化t時,呼叫複製建構函式。該函式為值傳遞形參,需要對a進行複製操作,又會呼叫複製建構函式,而複製建構函式是值傳遞,又需要進行複製操作 無限迴圈下去。顯然值傳遞是不可行的,解決辦法就是採用引用傳遞。class base base ...

為什麼複製建構函式的形參必須是引用型別?

複製建構函式只有乙個引數,由於在建立時傳入的是同種型別的物件,所以乙個很自然的想法是將該型別的物件作為引數,像這樣 sample sample a 不幸的是,即使是這樣樸實無華的宣告也隱含了乙個微妙的錯誤,呵,我們來看看 當某個時候需要以乙個sample物件的值來為乙個新物件進行初始化時,編譯器會在...

為什麼需要複製建構函式?

複製建構函式由編譯器隱式呼叫,主要的用途是 1 根據另乙個同型別的物件現實或隱式初始化乙個物件 2 複製乙個物件,將它作為實參傳給乙個函式 3 從函式返回時複製乙個物件 4 初始化順序容器中的元素 5 根據元素初始化式列表初始化陣列元素 類型別物件的初始化 直接初始化和複製初始化 根據c prime...