zoukankan      html  css  js  c++  java
  • C++ 析构方法

    1、什么是析构方法?

      析构方法与构造方法互补。

    2、为什么设计析构方法?

      构造方法创建一个对象,对象内部往往还会申请一些资源。设计析构方法的目的是 释放资源,同时销毁自身。

    3、析构方法可以认为分为两个:显式析构方法和合成析构方法。

      显式析构方法用于:释放对象申请的资源,也就是指针指向的对象。

      合成析构方法用于:销毁自身,对于对象的每一个数据成员(不包括继承的数据成员),进行析构。继承的数据成员通过父类的合成析构方法进行析构。

    4、即使编写了显示析构方法,合成析构方法仍然会运行。首先使用显式析构方法释放资源,再调用合成析构方法销毁自身。

    5、如果对象没有申请资源,显式析构方法不需要做任何事,也就不需要编写显式析构方法。

    6、构造析构的顺序:父类构造方法初始化对象的父类部分,子类构造方法初始化对象的子类部分。子类合成析构方法销毁对象的子类部分,父类合成析构方法销毁对象的父类部分。

    7、显示析构方法会影响到合成析构方法的调用,调用当前类的显式析构方法,就会调用当前类的合成析构方法,销毁对象的自身部分,再调用父类的合成析构方法,销毁对象的父类部分。

    8、一个类作为父类,他的析构方法必须是virtual,为什么?

      考虑,父类的显式析构方法是non-virtual,父类指针指向子类对象,delete父类指针。过程是:调用父类的显式析构方法,调用父类的合成析构方法,只销毁对象的父类部分,导致诡异的部分销毁对象。

      如果父类的显式析构方法是virtual,调用子类的显式析构方法,调用子类的合成析构方法,销毁子类部分,调用父类的合成析构方法,销毁父类部分。

    9、显式析构方法没有形参,没有返回值,因此,不能过载。

    10、什么情况下,执行析构方法?

      a、对象离开生存空间,也就是超出作用域。

      b、使用delete指针

      c、程序异常,栈展开的时候

    11、显式析构方法和合成析构方法都是隐式调用的,合成析构方法就是对自身包含的每一个对象,进行析构。

  • 相关阅读:
    一个好的时间函数
    Codeforces 785E. Anton and Permutation
    Codeforces 785 D. Anton and School
    Codeforces 510 E. Fox And Dinner
    Codeforces 242 E. XOR on Segment
    Codeforces 629 E. Famil Door and Roads
    Codeforces 600E. Lomsat gelral(Dsu on tree学习)
    Codeforces 438D The Child and Sequence
    Codeforces 729E Subordinates
    【ATcoder】D
  • 原文地址:https://www.cnblogs.com/nzbbody/p/3436053.html
Copyright © 2011-2022 走看看