close

解構子就是建構子的相反,不過建構子可以overload,解構子不行(只能有一個解構子)。

compiler會自動解構子,所以就算不寫也會解構。

寫法:

class A

{

~A(){} /**<---這就是解構子,加一個波浪**/

}

以下來看看建構及解構的順序。


#include <iostream>

using namespace std;
class A
{
public:
    A(int inp_a)/**constructor**/
    {
        a = inp_a;
        cout<<"Golden flower "<<a<<endl;
    }

    ~A()/**destructor**/
    {
        cout<<"destructor "<<a<<endl;
    }
private:
    int a;
};

void create(void)/**prototype**/
{
    A a7(7);
    static A a8(8);
    A a9(9);

}
/*-----Let's start!-----*/
A a1(1);
static a2(2);
A a3(3);
int main()
{
    A a4(4);
    static A a5(5);
    A a6(6);

    create();
    A a10(10);

    return 0;
}

執行狀況:

建構解構子


可見順序是這樣的:

  1. static基本上最後解構
  2. 建構順序:基本上是由上至下、global static constructor不會執行、若遇到local function會先執行local function內的解構子。
  3. 解構順序:基本上是由下至上、"先解構local function(不含static)"、解構main(不含static)、解構local function內的static、解構main裡的static、解構globa(不含static)
arrow
arrow
    創作者介紹
    創作者 Kuihao 的頭像
    Kuihao

    溫暖午後的金針田__孕育有趣的創新

    Kuihao 發表在 痞客邦 留言(1) 人氣()