首页 文章

c:成员分配如何工作? [重复]

提问于
浏览
12

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

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

但是这是什么意思?

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

没错 . b 如何应对 aarray ?通常 array_b = array_a 无效 .

另一个例子:

struct A {
    vector<int> vec;
};
A a;
A b=a;

b 如何应对 avec ?通过赋值( vec_b = vec_a ),构造函数( vec_b = vector<int>(vec_a) )或其他神秘方式?

2 回答

  • 1
    A b=a;
    

    不是赋值,它被称为 Copy Initialization .

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

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

    C++03 Standard: 12.8 (Copying class objects)

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

  • 9

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

    在非指针数组的情况下,每个元素都被复制 .

相关问题