我有一个 MyPoly 类,我在其中实现了自己的等号运算符 ( = )。当我尝试此代码时,一切正常,并且正在调用我实现的 =。
MyPoly mp = MyPoly(arr , 4);
MyPoly copy;
copy = mp;
但是当我写这个时:
MyPoly mp = MyPoly(arr , 4);
MyPoly copy = mp;
它不使用我实现的 = ,然后在调用析构函数时出现运行时错误。
有人可以解释为什么这些代码不同吗?
这
MyPoly copy = mp;
不是赋值,而是复制初始化。它使用复制构造函数,而不是赋值运算符。
MyPoly copy(mp);
是直接初始化。
MyPoly copy;
copy = mp;
是赋值。
MyPoly mp = MyPoly(arr , 4);
MyPoly copy = mp;
来电copy c-tor
,不行operator =
。在这copy initialization
两种情况下都是如此。
MyPoly copy = mp;
是相同的:
MPoly copy(mp);
如,它调用复制构造函数而不是赋值运算符。在赋值运算符旁边创建一个复制构造函数总是一个好主意。