复制的选件类对象

赋值操作和初始化操作引起复制对象。

  • 赋值:当一个对象的值赋给另一个对象时,第一个对象复制到另一个对象。 因此,

    Point a, b;
    ...
    a = b;
    

    导致 b 的值复制到 a。

  • 初始化:初始化时,会发生一个新的对象声明时,那么,当传递给函数值时,或者,如果值从函数返回值。

可以定义“复制”语义选件类类型对象的。 例如,请考虑此代码:

TextFile a, b;
a.Open( "FILE1.DAT" );
b.Open( "FILE2.DAT" );
b = a;

前面的代码可能表示“复制 FILE1.DAT 的内容到 FILE2.DAT,”或可能表示“忽略 FILE2.DAT 并使 b 第二处理程序到 FILE1.DAT”。您必须附加到适当副本的语义到每选件类,如下所示。

  • 通过使用具有引用一起的赋值运算符 operator= 到选件类类型作为返回类型和通过 const 引用 (例如 ClassName& operator=(const ClassName& x);的参数。

  • 通过复制构造函数。 有关复制构造函数的更多信息,请参见 声明构造函数规则

如果不声明复制构造函数,编译器将为您生成一个成员复制构造函数。如果不声明复制赋值运算符,编译器将为您生成一个成员复制赋值运算符。声明复制构造函数不禁止编译器生成的复制赋值运算符,也不反之亦然。 如果实现上述任一,建议您还实现方一个,以便代码的含义很有把握。

成员分配在 成员分配和初始化将更详细地介绍。

复制构造函数采用类型 选件类名称**&**的参数,其中 选件类名称 是构造函数定义选件类的名称。 例如:

// spec1_copying_class_objects.cpp
class Window
{
public:
    Window( const Window& ); // Declare copy constructor.
    // ...
};

int main()
{
}

备注

将该类型复制构造函数的参数 const 选件类名称& 尽可能。这样可防止复制构造函数意外更改它复制的对象。它还使复制 const 对象。

请参见

参考

特殊成员函数(C++)