老师这里我不太明白,我写出来了

老师这里我不太明白,我写出来了

就是这个*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;
}

正在回答 回答被采纳积分+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 *这个类型字节数,

  • 提问者 BryantJames #1

    明白了老师

    2022-12-14 17:50:32
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师