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