析构函数
名字与类名相同,在前面加~
,没有参数和返回值,一个类最多
只能有一个
析构函数。
析构函数
对象消亡时即自动被调用
。可以定义析构函数来在对象消亡前做善后工作,如释放分配的空间等。
如果定义类时没写析构函数,则编译器生成缺省析构函数,缺省析构函数什么也不做。
如果定义了析构函数,则编译器不生成缺省析构函数
class String
{
privete:
char* p;//定义字符类型指针
public:
String()//无参构造函数
{
p=new char[10];//使用new动态分配内存空间
}
~String();
};
String::~String()
{
delete []p;
}
对象数组生命期结束
时,
对象数组的每个元素的析构函数都会被调用
。
class Ctest{
public:
~Ctest()
{
cout<<"destructor caled"<<endl;
}
};
int main()
{
Ctest array[2];
cout<<"End Main"<<end;
//输出:End Main
return 0;
//输出:destructor caled
// destructor caled
}
delete运算导致析构函数调用。。。若
new一个对象数组,那么用delete释放时应该写[]
。否则delete一个对象(调用一次析构函数)
Ctest * pTest;//定义一个Ctest类的指针对象
pTest=new Ctest;//使用new为指针对象动态分配内存,构造函数调用
delete pTest;//析构函数调用
---------------------------------------------------------
pTest=new Ctest[3];//构造函数调用3次
delete [] pTest;//析构函数调用3次
析构函数在对象作为函数返回值返回时被调用
class CMyclass
{
public:
~CMyclass()
{
cout<<"destructor"<<endl;
}
};
CMyclass obj;
CMyclass fun(CMyclass sobj)//参数对象消亡也会导致析构函数被调用
{
return sobj;//函数调用返回时生成临时对象返回
}
int main()
{
obj=fun(obj);//函数调用的返回值(临时对象)被用过后,改临时对象析构函数被调用
return 0;
}
版权声明:本文为weixin_44644457原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。