析构函数怎么用啊,为什么我一加析构函数就会出错?
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,这就会出错了.