gpt4 book ai didi

c++ - 重载复制赋值运算符

转载 作者:搜寻专家 更新时间:2023-10-31 01:45:26 25 4
gpt4 key购买 nike

最近一直在学习重载运算符,很快就接触到了重载复制运算符。我尝试了一些示例,但无法真正理解格式及其功能。好吧,如果你能用更简单的术语向我解释代码,那将会很有帮助,因为我是 c++ 的初学者。无论如何,这是我的代码:

#include <iostream>
using namespace std;

class Point{
private:
int* lobster;
public:
Point(const int somelobster){
lobster = new int;
*lobster = somelobster;
}
//deep copy
Point(const Point& cpy){ //copy of somelobster(just to make sure that it does not do shallow copy)
lobster = new int;
*lobster = *cpy.lobster;
}
//assingment operator
Point& operator=(const Point& cpy){ //used to copy value
lobster = new int; //same thing as the original overloaded constructor
*lobster = *cpy.lobster; //making sure that it does not makes a shallow copy when assigning value
return *this;
}

void display_ma_lobster(){ //display nunber
cout << "The number you stored is: " << *lobster << endl;
}
~Point(){ //deallocating memory
cout << "Deallocating memory" << endl;
delete lobster;
}
};

int main(){
Point pnt(125);
cout << "pnt: ";
pnt.display_ma_lobster();
cout << "assigning pnt value to tnp" << endl;
Point tnp(225);
tnp = pnt;
tnp.display_ma_lobster();
return 0;
}

但真正需要解释的主要部分是:

//deep copy 
Point(const Point& cpy){ //copy of somelobster(just to make sure that it does not do shallow copy)
lobster = new int;
*lobster = *cpy.lobster;
}
//assingment operator
Point& operator=(const Point& cpy){ //used to copy value
lobster = new int; //same thing as the original overloaded constructor
*lobster = *cpy.lobster; //making sure that it does not makes a shallow copy when assigning value
return *this;
}

谢谢你的时间

最佳答案

复制赋值运算符可以使用对象已经拥有的现有资源。它不像构造函数。 (你的复制构造函数是正确的。)

//assingment operator
Point& operator=(const Point& cpy){ //used to copy value
// Do not allocate anything here.
// If you were to allocate something, that would require deallocating yer shit too.

*crap = *cpy.crap; //making sure that it does not makes a shallow copy when assigning value
return *this;
}

关于c++ - 重载复制赋值运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22162897/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com