複製建構函式

另一方面,複製建構函式與 Assignment Constructor 完全相反。這次,它用於初始化已經不存在的(或以前未初始化的)物件。這意味著它會複製你分配給它的物件的所有資料,而不會實際初始化要複製的物件。現在讓我們看看與以前相同的程式碼,但將賦值建構函式修改為複製建構函式:

// Copy Constructor
#include <iostream>
#include <string>

using std::cout;
using std::endl;

class Foo
{
  public:
    Foo(int data)
    {
        this->data = data;    
    }
    ~Foo(){};
    Foo(const Foo& rhs)
    {
            data = rhs.data; 
    }

    int data;
};

int main()
{
   Foo foo(2); //Foo(int data) called
   Foo foo2 = foo; // Copy Constructor called
   cout << foo2.data << endl;
}

你可以在主函式中看到 Foo foo2 = foo; 我在實際初始化之前立即分配物件,如前所述,這意味著它是一個複製建構函式。請注意,我不需要為 foo2 物件傳遞引數 int,因為我自動從物件 foo 中提取了以前的資料。這是一個示例輸出: http//cpp.sh/5iu7