C++ 运算符 = 问题

标签 c++ operators

我有一个 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/

相关文章:

c++ - 立即使用 boost::asio 检测写入期间关闭的 TCP 连接

c++ - 从双引号包围的子字符串中删除特定字符

F# 将带参数的运算符传递给函数

javascript - 最佳实践 "OR"和 "Ternary"运算符

visual-studio-2010 - 为什么运算符在 C++-CLI 中不起作用?

c++ - 为什么operator->重载在VC2010中不起作用?

c++ - OpenCV imread 问题

c++ - 从构造函数跨 DLL 边界抛出异常

c++ - << 运算符模板的实现//C++

javascript - ||创建 jQuery 插件时在 JavaScript 中使用(或运算符)