天天看點

OOP學習筆記一複制構造函數(copy constructor)

是一個特殊的構造函數,通過現有對象創造新對象。

複制構造函數有着特殊的函數原型,很容易識别,一般其有一個所屬類的參數(引用)。

如class a 的普通的構造函數為

a(); 其複制構造函數可以是a(const a& aa);或a(a&  aa);

在建立或者初始化一個對象的時候,(從無到有地建立)會調用普通構造函數;在用已有對象建立一個新對象時會調用複制構造函數。

出現下列情況時,将調用複制構造函數:

對象從一個函數按值傳遞至另一個函數時;

對象從函數按值傳回時;

通過現有對象初始化一個新對象時。

如下例:

void f()
{
TInt x(100);//建立一個TInt型的對象
//g()是一個接受TInt值的函數
void g(TInt);
//...
g(x);
}

void g(TInt y)
{
//...
}
           

當f()函數調用帶參數x的g()函數時,複制構造函數構造了一個x的副本,該副本作為實參提供給g()的形參y。從g()退出時,對象y(該函數的形參)被銷毀,即對象y調用了析構函數。在g()内操作對象y不會影響f()内的對象x(按值傳遞)

繼續閱讀