共用方式為


複製類別物件

指派運算和初始化作業造成物件複製。

  • 指派:將物件的值指派給另一個物件時,第一個物件複製到第二個物件。 因此,

    Point a, b;
    ...
    a = b;
    

    造成 b 的值複製到 a。

  • 初始化:初始化發生時,新的物件時,宣告,在引數傳遞至函式值時,或者,當值從函式傳回的值時。

您可以定義「Copy」語意類別型別的物件。 例如,請考慮下列程式碼:

TextFile a, b;
a.Open( "FILE1.DAT" );
b.Open( "FILE2.DAT" );
b = a;

上述程式碼可能表示「複製 FILE1.DAT 內容至 FILE2.DAT」或其可能表示「ignore FILE2.DAT 並進行 b 第二個控制代碼 FILE1.DAT」。您必須附加適當複製語意到每一個類別,如下所示。

  • 您可以使用含有參考來指派運算子 operator= 對類別型別做為傳回型別並傳遞 const 參考 (例如 ClassName& operator=(const ClassName& x);的參數。

  • 使用複製建構函式。 如需複製建構函式的詳細資訊,請參閱 宣告建構函式的規則

如果您沒有宣告複製建構函式,則編譯器會產生成員複製建構函式。如果您沒有宣告複製指派運算子,編譯器會產生成員複製指派運算子。宣告複製建構函式不會隱藏編譯器產生的複製指派運算子,也不反之亦然。 如果您實作任一個,建議您一起實作另一個,讓程式碼的意義清楚。

成員指派在 對工作分派和初始化較詳細說明。

複製建構函式接受型別 類別名稱**&**的引數,其中 類別名稱 是建構函式定義類別的名稱。 例如:

// spec1_copying_class_objects.cpp
class Window
{
public:
    Window( const Window& ); // Declare copy constructor.
    // ...
};

int main()
{
}
注意事項注意事項

將這個型別的複製建構函式的引數 const 類別名稱& 盡可能。這樣可避免複製建構函式不小心變更複製的物件。它也會複製 const 物件。

請參閱

參考

特殊成員函式 (C++)