复制构造函数和分配构造函数
好的,我们简要地查看了上面的复制构造函数和赋值构造函数,并给出了每个示例,现在让我们在同一代码中看到它们。此代码与上面两个类似。我们来看看:
// 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
;