C++中带指针的运算符重载问题

#include<iostream>usingnamespacestd;classnum{public:num(){n=newint;*n=1;cout<<"构造函数执行... #include<iostream>
using namespace std;
class num
{
public:
num(){n=new int;*n=1;cout<<"构造函数执行"<<endl;}
num(int i){n=new int;*n=i;cout<<"带参数的构造函数执行"<<endl;}
~num(){
delete n;
n=NULL;
cout<<"析构函数执行"<<endl;
}
int get()const{return *n;}
const num operator+(const num&r)
{
cout<<"+运算执行"<<endl;
int *x=new int;
*x=*n+*(r.n);
n=new int;
*n=*x;
return num(*n);

}

private:
int *n;
};
int main()
{
num one(2),two(3),*three=new num;
*three=one+two;
cout<<three->get()<<endl;
return 0;

}

运行结果中,第一个析构函数执行是哪一步执行的?析构函数中delete语句去掉程序才可以输出正确结果5,如何才可以避免上面这种情况(输出随机数字),并且清掉堆中内存?
展开
 我来答
大板栗面包
2014-01-02 · TA获得超过254个赞
知道小有建树答主
回答量:214
采纳率:0%
帮助的人:172万
展开全部

运算符重载函数有问题, 然后还缺少赋值函数, 主函数中没有释放three

改正后如下:

#include<iostream>
using namespace std;
class num
{
public:
num(){n=new int;*n=1;cout<<"构造函数执行"<<endl;}
num(int i){n=new int;*n=i;cout<<"带参数的构造函数执行"<<endl;}

~num(){
delete n;
n=NULL;
cout<<"析构函数执行"<<endl;
}

int get()const{return *n;}

const num& operator+(const num&r)
{
*(this->n) += *(r.n);
return *this;
}

num& operator=(const num& r)
{
*(this->n) = *(r.n);
return *this;
}
private:
int *n;
};

int main()
{
num one(2),two(3),*three=new num;
*three=one+two;
cout<<three->get()<<endl;
delete three;
return 0;

}
core_head
2014-01-02
知道答主
回答量:13
采纳率:0%
帮助的人:8.9万
展开全部
第一个析构函数在你运行使用操作符重载结束后执行的,,,你在操作符重载函数里面的对象是直接申明的,等同于局部的变量,没有使用new创建对象,操作符重载函数执行结束后,该对象生命周期就结束了,即自己调用析构函数。。你外部使用的对象其实就不存在了,,,,,

我对这一块了解不是太多,感觉可能是这里的问题,你不妨用操作符重载函数里面用new创建对象试一下,
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式