解構子就是建構子的相反,不過建構子可以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;
}
執行狀況:
可見順序是這樣的:
- static基本上最後解構
- 建構順序:基本上是由上至下、global static constructor不會執行、若遇到local function會先執行local function內的解構子。
- 解構順序:基本上是由下至上、"先解構local function(不含static)"、解構main(不含static)、解構local function內的static、解構main裡的static、解構globa(不含static)
留言列表