老师这里我不太明白,我写出来了
就是这个*this = obj;
这一句是不是说把obj的值给现在这个实例,按照道理他们不是应该是一样的嘛,为啥加上这句就不行了
#include <iostream>
using namespace std;
class Test{
public:
Test(int size){
cout << "Test(int size)" << endl;
data = new int[size];
}
Test(const Test &obj){
cout << "Test(const Test obj)" << endl;
if(obj.data){
int size=sizeof(obj.data)/sizeof(obj.data[0])+1;
this->data=new int[size];
// cout << data << endl;
//this->data=obj.data;
for(int i=0; i<size; i++){
this->data[i]=obj.data[i];
}
//*this = obj;
}else {
this->data=NULL;
}
}
~Test(void){
cout << "~Test()" << endl;
// cout << data << endl;
if(data!=NULL) {
delete [] data;
}
}
private:
int *data;
};
Test function(Test obj)
{
Test tmp = obj;
return tmp;
}
int main(void)
{
Test obj1(3);
Test obj2 = function(obj1);
return 0;
}
13
收起
正在回答 回答被采纳积分+1
1回答
山行老师
2022-12-13 22:36:01
拷贝一个实例给另一个实例,有2种情况:
1)Test obj2 = obj1或者Test obj2(obj1),这种情况是拷贝构造,会调用Test(const Test &other);
2)obj2 = obj1这种情况是赋值运算符=重载,会调用Test&operator =(const Test &other); 你给的代码中*this = obj属于后者,所以需要补全运算符重载函数Test&operator =(const Test &other);
另外这句代码不能达到求指针指向空间元素个数的目的:int size=sizeof(obj.data)/sizeof(obj.data[0])+1;
//这里的sizeof(obj.data)是求int *这个类型字节数,
物联网/嵌入式工程师
- 参与学习 394 人
- 提交作业 22954 份
- 解答问题 1163 个
行业热门,政策风口,人才缺口极大,现在入场时机正好! 上千人检验,数轮迭代的硬核知识体系,软硬件通吃 保姆式教学+简历指导+1V1模拟面试+3次内推,助力轻松就业!
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星