1. 程式人生 > >什麼時候需要自己定義拷貝建構函式

什麼時候需要自己定義拷貝建構函式

網路上搜索了一下:

1、這裡有個簡單的規則:如果你需要定義一個非空的解構函式,那麼,通常情況下你也需要定義一個拷貝建構函式。

2、有一個原則:一般來說你在類中進行了new操作,你就需要解構函式,在你需要解構函式的類中,一般需要加上挎貝建構函式和賦值函式。

3、拷貝建構函式,是一種特殊的建構函式,它由編譯器呼叫來完成一些基於同一類的其他物件的構建及初始化。其唯一的引數(物件的引用)是不可變的(const型別)。此函式經常用在函式呼叫時使用者定義型別的值傳遞及返回。拷貝建構函式要呼叫基類的拷貝建構函式和成員函式。如果可以的話,它將用常量方式呼叫,另外,也可以用非常量方式呼叫。

在C++中,下面三種物件需要呼叫拷貝建構函式(有時也稱“複製建構函式”):

  1) 一個物件作為函式引數,以值傳遞的方式傳入函式體;

  2) 一個物件作為函式返回值,以值傳遞的方式從函式返回;

  3) 一個物件用於給另外一個物件進行初始化(常稱為複製初始化);

通常的原則是:①對於凡是包含動態分配成員或包含指標成員的類都應該提供拷貝建構函式;②在提供拷貝建構函式的同時,還應該考慮過載"="賦值操作符號。