可能重复:如何在复制控制功能中处理C数组成员?
如果我不覆盖类的 operator =
,它将使用默认的成员分配 .
但是这是什么意思?
struct A {
int array[100];
};
A a;
A b=a;
没错 . b
如何应对 a
的 array
?通常 array_b = array_a
无效 .
另一个例子:
struct A {
vector<int> vec;
};
A a;
A b=a;
b
如何应对 a
的 vec
?通过赋值( vec_b = vec_a
),构造函数( vec_b = vector<int>(vec_a)
)或其他神秘方式?
2 回答
不是赋值,它被称为 Copy Initialization .
调用隐式生成的复制构造函数以从现有对象
a
创建新对象b
.隐式生成的复制构造函数生成
array
成员的副本 .为了完整起见,我将在此处添加标记副本的标准引文 .
C++03 Standard: 12.8 (Copying class objects)
如果成员具有复制构造函数,则会调用它们 . 如果没有,默认的复制构造函数就相当于memcpy . 见Memberwise Assignment and Initialization .
在非指针数组的情况下,每个元素都被复制 .