美文网首页
C++ - 析构函数

C++ - 析构函数

作者: Mitchell | 来源:发表于2016-01-14 21:32 被阅读68次
  • 成员函数的一种
    • 名字与类名相同
    • 在前面加“~”
    • 没有参数和返回值
    • 一个类最多只有一个析构函数
  • 对象消亡时候 - > 自动被调用
    • 在对象消亡前做善后工作
    • 释放分配的空间等
  • 定义类时没写析构函数,则编译器生成缺省析构函数
    • 不涉及释放用户申请的内存释放等清理工作
  • 定义了析构函数,则编译器不生成缺省析构函数
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"<<endl;
}
int main(){
    Demo d4(4);
    d4 = 6;
    cout<<"main"<<endl;
    {Demo d5(5);  }
    Func();
    cout<<"main ends"<<endl;
    return 0;
}
输出:
id = 1  Constructed
id = 4  Constructed
//复制构造函数会创建一个临时的对象
id = 6  Constructed
id = 6  Destructed// d4的 id = 6
main
id = 5  Constructed
id = 5  Destructed
id = 2  Constructed
id = 3  Constructed
Func
id = 3  Destructed
main ends
id = 6  Destructed//d4
id = 2  Destructed
id = 1  Destructed

相关文章

  • 简介python中的析构函数与构造函数

    python的构造和析构函数为固定的名字。 构造函数 析构函数 不像c++中那样构造函数和析构函数是类名字。并且在...

  • [C++之旅] 13 析构函数

    [C++之旅] 13 析构函数 析构函数与构造函数相反,构造函数在实例化一个对象时调用,而析构函数在销毁一个对象时...

  • 2020-02-10 C++基础2

    1:为什么析构函数必须是虚函数?为什么C++默认的析构函数不是虚函数? 将可能会被继承的父类的析构函数设置为虚...

  • c++构造函数,析构函数,调用顺序

    最近,在看c++,聊一个简单的话题吧。构造函数,析构函数,及调用顺序。 构造函数, 构造函数,析构函数,如上代码所...

  • c++学习笔记2(GeekBand)

    拷贝构造、拷贝赋值和析构 c++中有Big Three三个特殊的函数,他们就是拷贝构造函数,拷贝赋值函数和析构函数...

  • 第十五章 析构过程

    c++中,如果没有定义析构函数,c++会提供一个默认析构函数;由于swift采用自动引用计数来进行内存管理,不需要...

  • 2002.C++BASE-构造函数、析构函数

    转:C++继承中构造函数、析构函数调用顺序及虚析构函数 1.构造函数 大家都知道构造函数里就可以调用成员变量,而继...

  • C++ 多态性 虚函数、抽象类(二)

    注意:本文中代码均使用 Qt 开发编译环境 在C++中不能声明虚构造函数,但是可以声明虚析构函数。析构函数没有类型...

  • C++ 析构函数

    析构函数是C++中,类的一个后置函数,默认自动调用,具体的实现用法请看下面。 你看,析构函数的定义...

  • Python:重载构造方法

    对于使用过C++的人来说,构造函数与析构函数不会陌生。构造函数在对象创建时被调用,析构函数在对象被销毁时被调用。而...

网友评论

      本文标题:C++ - 析构函数

      本文链接:https://www.haomeiwen.com/subject/rtchkttx.html