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...