oop*_*lon 2 c++ copy-constructor assignment-operator
我上课了
class Circle : public isCircle{
private :
int x;
int y;
vector<Circle*> _neighbors;
}
Run Code Online (Sandbox Code Playgroud)
where isCircle只是一个接口(使用虚方法),并且_neighbors包含指针的Circles未被此实例分配.我的问题是,在这种情况下,默认的复制和赋值运算符基本上会做深度复制吗?
C++类型的默认复制构造函数的工作方式是,在实例中的每个字段上调用复制构造函数,并在创建副本的对象中使用相应的字段.在您的示例中,它大致转换为
Circle(const Circle& other) :
x(other.x),
y(other.y),
_neighobrs(other._neighbors) {
}
Run Code Online (Sandbox Code Playgroud)
副本是否深度是每个字段的复制构造函数的实现细节.在这种情况下,复制构造函数vector<T>有点混合.它将深层复制底层存储,使每个存储都vector<T>拥有自己独立的阵列.但是,它将使用复制构造函数复制元素.在这种情况下,它是一个指针类型,因此它们以浅层方式复制