複製建構函式和分配建構函式

好的,我們簡要地檢視了上面的複製建構函式和賦值建構函式,並給出了每個示例,現在讓我們在同一程式碼中看到它們。此程式碼與上面兩個類似。我們來看看:

// Copy vs Assignment 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; 
    }

    Foo& operator=(const Foo& rhs)
    {
        data = rhs.data; 
        return *this;
    }

    int data;
};

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

   Foo foo3(42);
   foo3=foo; //Assignment Constructor Called
   cout << foo3.data << endl;
}

輸出:

2
2

在這裡,你可以看到我們首先通過執行 Foo foo2 = foo; 行呼叫複製建構函式。因為我們以前沒有初始化它。接下來我們在 foo3 上呼叫賦值運算子,因為它已經初始化了 foo3=foo;