您的位置:程序门 -> c/c++ -> c++ 语言



c++ 又一程序,请教?


[收藏此页] [打印本页]选择字色:背景色:字体:[][][]


c++ 又一程序,请教?
发表于:2007-10-10 15:08:51 楼主
#include   <iostream>
#include   <cstdlib>

using   namespace   std;

class   dyna{
int   *p;
public:
dyna(int   i);
~dyna(){free(p);cout < <"free\n";}
int   get(){return   *p;}
};

dyna::dyna(int   i)
{
p   =   (int   *)malloc(sizeof(int));

if(!p)
{
cout < <"error\n";
exit(1);
}
*p   =   i;
}

int   neg(dyna   ob)
{
return   -ob.get();
}

int   main()
{
dyna   o(-10);

cout < <o.get() < <endl;
cout < <neg(o) < <endl;

dyna   o2(20);
cout < <o2.get() < <endl;
cout < <neg(o2) < <endl;

cout < <o.get() < <endl;
cout < <neg(o) < <endl;

return   0;
}
发表于:2007-10-10 15:20:241楼 得分:0
int   neg(dyna   ob)  
函数使用传值,调用拷贝构造函数,
你没自定义拷贝构造函数,默认的使用位拷贝,
则形参里的p和变量指向同一段缓存,形参析构时会释放缓存,变量析构时也会释放该缓存
所以出错

把参数改成引用:int   neg(dyna&   ob)  
根本方法是自己定义拷贝构造函数和赋值构造函数
发表于:2007-10-10 15:26:552楼 得分:0
没有拷贝构行导致两次析构,两次delete同一个内存.
发表于:2007-10-10 15:35:453楼 得分:0
int   neg(dyna   ob)  
{  
return   -ob.get();  
}  
每次调用都多free了一次内存,原因如上!
把参数改成引用:int   neg(dyna&   ob)    
根本方法是自己定义拷贝构造函数和赋值构造函数
这个正解!


快速检索

最新资讯
热门点击