1. 程式人生 > >Cpp Experiment -- 當程序被銷燬時,不會呼叫程序中物件的解構函式

Cpp Experiment -- 當程序被銷燬時,不會呼叫程序中物件的解構函式

    我們知道,當一個程序被銷燬時,分配給它的資源會被回收,包括洩漏的記憶體,實際上,重啟程序是解決記憶體洩漏的一個應急方法。

    但是,殺死程序時, 會呼叫被殺死的程序建立的物件的解構函式嗎?

    實驗程式碼如下:

#include<iostream>

class Test{
public:
    ~Test()
    {   
        std::cout << "Hello donz!" << std::endl;
    }   
};

int main()
{
    Test test;
    
    int a;
    std::cin >> a;
    
    return 0;
}

    首先建立一個遠端連線呼叫以上程式碼,可以看到程式在等待輸入:

    之後,開啟另一個遠端連線,使用ps -x檢視當前程序:

    我們可以看到./test確實在運行了。 之後呼叫kill命令殺死這個程序:

    切回另一個遠端連線視窗,我們發現:

    原來是在等待輸入,現在已經確實被終止了。但Test的解構函式並沒有被呼叫,沒有輸入任何文字。

—————————————————————結論———————————————————

    當一個程序被殺死時,程序中建立的物件會被釋放,但不是通過常規途徑,不會呼叫解構函式。

    如果有理鋖不對的地方,可以在評論裡提出來,一起探討。