c ++:成员分配如何工作?

时间:2012-05-05 11:43:32

标签: c++ variable-assignment

  

可能重复:
  How are C array members handled in copy control functions?

如果我不覆盖类的operator =,它将使用默认的成员分配。

但它是什么意思?

struct A {
    int array[100];
};
A a;
A b=a;

没有错误。 b如何应对a的{​​{1}}?通常array无效。

另一个例子:

array_b = array_a

struct A { vector<int> vec; }; A a; A b=a; 如何应对b的{​​{1}}?通过赋值(a),构造函数(vec)或其他神秘方式?

2 个答案:

答案 0 :(得分:9)

A b=a;

不是作业,它被称为 Copy Initialization

调用隐式生成的复制构造函数,以从现有对象b创建新对象a。 隐式生成的复制构造函数生成array成员的副本。

为了完整起见,我将在此处添加标记副本中的标准引文。

C ++ 03标准:12.8(复制类对象)

  

以适合其类型的方式复制每个子对象:

     
      
  • 如果子对象是类类型,则使用该类的复制构造函数;
  •   
  • 如果子对象是一个数组,则以适合于元素类型的方式复制每个元素;
  •   
  • 如果子对象是标量类型,则使用内置赋值运算符。
  •   

答案 1 :(得分:1)

如果成员具有复制构造函数,则会调用它们。如果没有,默认的复制构造函数就相当于memcpy。请参阅Memberwise Assignment and Initialization

对于非指针数组,每个元素都被复制。