C++【09】析构函数

  • Post author:
  • Post category:其他


析构函数


名字与类名相同,在前面加~

,没有参数和返回值,一个类最多

只能有一个

析构函数。

析构函数

对象消亡时即自动被调用

。可以定义析构函数来在对象消亡前做善后工作,如释放分配的空间等。

如果定义类时没写析构函数,则编译器生成缺省析构函数,缺省析构函数什么也不做。

如果定义了析构函数,则编译器不生成缺省析构函数

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 版权协议,转载请附上原文出处链接和本声明。