1.为什么会析构3次?
因为这里的参数传递方式是值传递,会创建一个该参数的副本,函数调用完成之后,该副本会被析构。如果将函数test(Internet ts)改成 test(Internet &ts),则只会析构2次
2.自定义构造函数有问题,如果像下面这样调用自定义构造函数,运行时就会崩溃。
char *p1=NULL;
char *p2=NULL;
Internet a(p1,p2);
所以自定义构造函数应该写成下面这样:
Internet(char *name,char *address)
{
cout<<"载入构造函数"<<endl;
if (name==NULL)
{
Internet::name[0]='/0';
Internet::cname=NULL;//指针cname与传入的值相同,都是空指针。
}
else
{
strcpy(Internet::name,name);
cname=new char[strlen(name)+1];
if(cname!=NULL) //如果name==NULL的话,cname默认为'/0'?不对,如果name==NULL的话,strcpy函数会执行崩溃
{
strcpy(Internet::cname,name); //cname指针指向name字符串
}
}
if (address==NULL)
{
Internet::address[0]='/0';
}
else
{
strcpy(Internet::address,address);
}
}