复制构造函数

另一方面,复制构造函数与 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