c ++默认复制和赋值运算符

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未被此实例分配.我的问题是,在这种情况下,默认的复制和赋值运算符基本上会做深度复制吗?

Jar*_*Par 9

C++类型的默认复制构造函数的工作方式是,在实例中的每个字段上调用复制构造函数,并在创建副本的对象中使用相应的字段.在您的示例中,它大致转换为

Circle(const Circle& other) :
  x(other.x),
  y(other.y),
  _neighobrs(other._neighbors) {

}
Run Code Online (Sandbox Code Playgroud)

副本是否深度是每个字段的复制构造函数的实现细节.在这种情况下,复制构造函数vector<T>有点混合.它将深层复制底层存储,使每个存储都vector<T>拥有自己独立的阵列.但是,它将使用复制构造函数复制元素.在这种情况下,它是一个指针类型,因此它们以浅层方式复制