读书人

析构函数如何用啊为什么小弟我一加析构

发布时间: 2012-02-17 17:50:42 作者: rapoo

析构函数怎么用啊,为什么我一加析构函数就会出错?
class MyString
{
public:
........
........
private:
int size;
char * myStr;
};
MyString::~MyString()
{
delete []myStr;
}
去掉其中的析构函数程序就可以正常运行,但一旦加上就会出错.这是什么原因?我的析构函数写的有错误吗?

[解决办法]
晕上面写错了一个地方.看下面这个:

因为你的程序并没有为myStr这个char指针分配内存,就调用了delete[] myStr,所以出错.可以加一个所省构造函数来修改

class MyString
{
public:

MyString(const char *p=0)//加一个缺省值为0的构造函,这样在对象生命期结束调用{ //析构函数时delete []myStr就不会出错
if(p!=0)
{
myStr=new char[strlen(p)+1]; //这里要加1,上面那个忘了 :P
strcpy(myStr,p);
}
}

private:
int size;
char * myStr;
};
MyString::~MyString()
{
delete []myStr;
}
[解决办法]
在构造函数中,先为myStr赋个初值,再进行其它操作。
MyString(const char *p=0)
: myStr(NULL)
{
if(p!=0)
{
myStr=new char[strlen(p)+1];
strcpy(myStr,p);
}
}
delete空指针不会出错,但是在开辟内在空间时,指针myStr并不是NULL,这就会出错了.

读书人网 >C++

热点推荐