zoukankan      html  css  js  c++  java
  • 【C++笔记】析构函数(destructor)

    “析构函数”是构造函数的反向函数。 在销毁(释放)对象时将调用它们。 通过在类名前面放置一个波形符 (~) 将函数指定为类的析构函数。 

     
    声明析构函数
     
    析构函数是具有与类相同的名称但前面是波形符 (~) 的函数

    该语法的第一种形式用于在类声明中声明或定义的析构函数;第二种形式用于在类声明的外部定义的析构函数。

    多个规则管理析构函数的声明。 析构函数:

    • 不接受参数。

    • 无法指定任何返回类型(包括 void)。

    • 无法使用 return 语句返回值。

    • 无法声明为 const、volatile 或 static。 但是,可以为声明为 const、volatile 或 static 的对象的析构调用它们。

    • 可以声明为 virtual。 通过使用虚拟析构函数,无需知道对象的类型即可销毁对象 - 使用虚函数机制调用该对象的正确析构函数。 请注意,析构函数也可以声明为抽象类的纯虚函数。

    当下列事件之一发生时,将调用析构函数:

    • 使用 delete 运算符显式解除分配了使用 new 运算符分配的对象。 使用 delete 运算符解除分配对象时,将为“大多数派生对象”或为属于完整对象,但不是表示基类的子对象的对象释放内存。 此“大多数派生对象”解除分配一定仅对虚拟析构函数有效。 在类型信息与实际对象的基础类型不匹配的多重继承情况下,取消分配可能失败。

    • 具有块范围的本地(自动)对象超出范围。

    • 临时对象的生存期结束。

    • 程序结束,并且存在全局或静态对象。

    • 使用析构函数的完全限定名显式调用了析构函数。 (有关详细信息,请参阅显式析构函数调用。)

    示例

    // operator delete[] example
    #include <iostream>     // std::cout
    
    struct MyClass {
      MyClass() {std::cout <<"MyClass constructed
    ";}
      ~MyClass() {std::cout <<"MyClass destroyed
    ";}
    };
    
    int main () {
      MyClass * pt;
    
      pt = new MyClass[3];
      delete[] pt;
    
      return 0;
    }

    输出:

    myclass constructed
    myclass constructed
    myclass constructed
    myclass destroyed
    myclass destroyed
    myclass destroyed
  • 相关阅读:
    CCNA 第二章 以太网回顾
    CCNA 第一章 网络互联
    solidworks中 toolbox调用出现未配置的解决方法
    linux之df命令
    linux之du命令
    linux之pid文件
    linux之mysql启动问题
    linux之使用cron,logrotate管理日志文件
    wordpress(一)wordpress环境的搭建
    phpwind8.7升级9.0.1过程(四)20130207升级到20141228
  • 原文地址:https://www.cnblogs.com/liez/p/8011143.html
Copyright © 2011-2022 走看看