如何解决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 举报,一经查实,本站将立刻删除。