我有一个MyPoly类,我实现了自己的相等运算符(=).当我尝试这个代码一切正常,我的实现=被调用.
MyPoly mp = MyPoly(arr , 4);
MyPoly copy;
copy = mp;
Run Code Online (Sandbox Code Playgroud)
但是当我写这个:
MyPoly mp = MyPoly(arr , 4);
MyPoly copy = mp;
Run Code Online (Sandbox Code Playgroud)
它不使用我的implements =,然后当调用析构函数时,我得到一个运行时错误.
有人能解释为什么这些代码不同吗?
这条线
MyPoly copy = mp;
Run Code Online (Sandbox Code Playgroud)
是一个复制初始化,所以它不调用赋值运算符(你所谓的"相等运算符"),而是复制构造函数,它具有签名
MyPoly(const MyPoly&);
Run Code Online (Sandbox Code Playgroud)
并且由编译器生成,除非您提供自己的.至于运行时错误,您需要提供更多代码.但是我可以推测,既然你已经编写了自己的赋值运算符,那么你可能正在处理一些动态分配的资源,在这种情况下你应该遵循三条规则并实现你自己的拷贝构造函数和析构函数.如果你有C++ 11支持,你应该将它扩展到5的规则,并提供你自己的移动复制构造函数和移动赋值运算符.
| 归档时间: |
|
| 查看次数: |
139 次 |
| 最近记录: |