我有一个 MyPoly 类,我在其中实现了自己的相等运算符 ( = )。 当我尝试这段代码时,一切正常,我实现的 = 被调用。
MyPoly mp = MyPoly(arr , 4);
MyPoly copy;
copy = mp;
但是当我写这个的时候:
MyPoly mp = MyPoly(arr , 4);
MyPoly copy = mp;
它不使用我实现的 = ,然后在调用析构函数时出现运行时错误。
有人可以解释为什么这些代码不同吗?
最佳答案
这一行
MyPoly copy = mp;
是一个复制初始化,所以它不调用赋值运算符(你称之为“等于运算符”),而是调用具有签名的复制构造函数
MyPoly(const MyPoly&);
并且由编译器生成,除非您提供自己的。至于运行时错误,您需要提供更多代码。但我可以推测,由于您已经编写了自己的赋值运算符,您可能正在处理一些动态分配的资源,在这种情况下,您应该遵循 rule of three并实现您自己的复制构造函数和析构函数。如果你有 C++11 支持,你应该将其扩展到 rule of 5并提供您自己的移动复制构造函数和移动赋值运算符。
关于C++ 运算符 = 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12299448/