C++ - 析构函数

  • 成员函数的一种
    • 名字与类名相同
    • 在前面加“~”
    • 没有参数和返回值
    • 一个类最多只有一个析构函数
  • 对象消亡时候 - > 自动被调用
    • 在对象消亡前做善后工作
    • 释放分配的空间等
  • 定义类时没写析构函数,则编译器生成缺省析构函数
    • 不涉及释放用户申请的内存释放等清理工作
  • 定义了析构函数,则编译器不生成缺省析构函数
class String{
  private:
      char * p;
  public:
      String(){
          p = new char[10];
       }
      ~String();
};
String::~String(){
//注意,由于要释放的是数组,所以前面必须有[],如果用 delete p 只是释放了一个对象。
    delete [] p;
}
  • 对象数组生命周期结束时
    -> 对象数组的每个元素的析构函数都会被调用
  • delete 运算导致析构函数调用
Ctest * pTest;
p'Test = new Ctest;// 构造函数调用
delete pTest;//析构函数调用
pTest = new Ctest[3];//构造函数调用3次
delete[] pTest;//析构函数调用3次
  • 析构的顺序
Demo d1(1);
void Func(){
    static Demo d2(2);
    Demo d3(3);
    cout<<"Func"<

你可能感兴趣的:(C++ - 析构函数)