Cpp Experiment -- 當程序被銷燬時,不會呼叫程序中物件的解構函式
阿新 • • 發佈:2019-02-07
我們知道,當一個程序被銷燬時,分配給它的資源會被回收,包括洩漏的記憶體,實際上,重啟程序是解決記憶體洩漏的一個應急方法。
但是,殺死程序時, 會呼叫被殺死的程序建立的物件的解構函式嗎?
實驗程式碼如下:
#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的解構函式並沒有被呼叫,沒有輸入任何文字。
—————————————————————結論———————————————————
當一個程序被殺死時,程序中建立的物件會被釋放,但不是通過常規途徑,不會呼叫解構函式。
如果有理鋖不對的地方,可以在評論裡提出來,一起探討。