很简单的两个类
请注意那个delete 我把他注释掉就可以运行? 为什么?
那要怎么释放啊?
#include<iostream.h>
#include<string.h>
class dress
{
public:
dress(char *w)
{
p=new char[strlen(w)+1];
p=w;
}
dress operator =(dress &w)
{
//delete []p;
p=new char[strlen(w.p)+1];
p=w.p;
return *this;
}
void display()
{
cout<<*p<<endl;
}
~dress()
{
// delete []p;
}
private:
char *p;
};
void main()
{
dress a("777111");
a.display();
dress b("2222222");
b.display();
a=b;
a.display();
}
要写一个拷贝构造函数,另外你new出来怎么又直接p=w了?这样先前new出来的空间有什么用?而且还会造成析构时delete两次,肯定要出错,给你改好了,不过代码依旧隐患重重:
#include<iostream.h>
#include<string.h>
class dress
{
public:
dress(char *w)
{
p=new char[strlen(w)+1];
strcpy( p, w );
}
dress( const dress& d )
:p(0)
{
if ( p ) delete [] p;
p=new char[strlen(d.p)+1];
strcpy( p, d.p );
}
dress operator =(dress &w)
{
delete []p;
p=new char[strlen(w.p)+1];
strcpy( p , w.p );
return *this;
}
void display()
{
cout<<*p<<endl;
}
~dress()
{
delete []p;
}
private:
char *p;
};
void main()
{
dress a("777111");
a.display();
dress b("2222222");
b.display();
a=b;
a.display();
}
不应该用p=w;,前面new出来的空间丢失了,造成内存遗漏,并且delete[]变得不是释放上一句new出来的内存,而是去释放w的内存了。你可以考虑用strcpy把w的内容复制进来。
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息