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

Lai*_*uan 12 c++ variable-assignment

可能重复:
如何在复制控制功能中处理C数组成员?

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

但是这是什么意思?

struct A {
    int array[100];
};
A a;
A b=a;
Run Code Online (Sandbox Code Playgroud)

没错.如何bCOPES aarray?通常array_b = array_a无效.

另一个例子:

struct A {
    vector<int> vec;
};
A a;
A b=a;
Run Code Online (Sandbox Code Playgroud)

如何bCOPES avec?通过assignment(vec_b = vec_a),constructor(vec_b = vector<int>(vec_a))或其他神秘的方式?

Alo*_*ave 9

A b=a;
Run Code Online (Sandbox Code Playgroud)

不是赋值,它被称为复制初始化.

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

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

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

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

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