微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

C++ 赋值给一个对象

如何解决C++ 赋值给一个对象

为什么最后一个变量 c 不打印任何内容我知道这是由析构函数引起的,但我真的找不到原因。我认为析构函数仅在被调用函数、程序结束时才起作用。


.....//
class Int{
private:
  int a;
public:
  Int(): a{0}{}
  Int(int s):a{s}{}

  Int(const Int& va) : a{va.a} { }  
  Int& operator=(const Int& r){ a= r.a;  }
  
  ~Int(){delete this;}
  int get() const{return a;}
 

};
ostream& operator<<(ostream& os,const Int& obj)
{
    os<<obj.get();
    return os;
}
istream& operator>>(istream& is,Int& obj)
{
  .....//
}

  Int operator+(const Int& rhs,const Int& r) 
  {                           
    return Int(rhs.get()+r.get()); 
  }
   Int operator-(const Int& rhs,const Int& r) 
  {                           
   return Int(rhs.get()-r.get());
  }
   Int operator*(const Int& rhs,const Int& r) 
  {                           
   return Int(rhs.get()*r.get());
  }
   Int operator/(const Int& rhs,const Int& r) 
  {                           
   return Int(rhs.get()/r.get());
  }
 
int main(){
  Int a = 10;
  Int b = a;
  cout<<b;
  Int k = a+b;
  Int c= k*b;
  cout<<" "<<k<<" "<<c;
  c=300;
  cout<<" "<<c;
}

在此先感谢您的解释

解决方法

您在析构函数中的工作是清理您根据 RAII rules of C++ 分配或继承的所有资源。 不能删除自己。那不是你的工作。

由于您没有分配资源,您的工作非常简单:

~Int(){}

从字面上看,没什么。事实上,你可以完全跳过析构函数。仅当您具备以下条件时才需要这些:

  • 您需要delete或转让所有权的指针
  • 您需要释放或转让所有权的资源
  • 从另一个最终决定使用析构函数的类继承

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。