_3DTocka operator=(_3DTocka _3D){
swap(*this, _3D);
return *this;
}
//main()
_3DTocka _3Dx1(5, 9, 2), _3Dx2(_3Dx1); // first one is using constructor, second one copy constuctor and they both have 5,9,2
_3Dx1 = _3Dx2;
_3DTocka是该类的名称。代码编译然后程序在运行时立即给出SIGSEGV错误.. IDE转到move.h,第167行,代码:swap(_Tp& __a,_Tp& __b)
答案 0 :(得分:2)
这是一个无限递归。函数swap()的工作方式如下:
void swap(Type & a, Type & b) {
Type tmp = a; \
a = b; -> here it calls your operator=
b = tmp; /
}
您必须将_3D中的所有类属性分配给此
this->a = _3D.a;
this->b = _3d.b;
...
或者您可以使用memcpy(this, &_3D, sizeof(_3D))
,但仅限于您的类不包含其他对象,而只包含基本类型。
答案 1 :(得分:1)
函数swap
依次调用复制赋值运算符。因此,您将获得运算符的递归调用。
您应该为将交换对象的每个数据成员的类定义自己的交换函数。