0
在VC++ 7,如果我做了以下內容:是否允許null terminate()處理程序?
void myTerminate()
{
cout << "In myTerminate()";
abort();
}
int main(int, char**)
{
set_terminate(&myTerminate);
set_terminate(0);
terminate();
return 0;
}
程序的行爲完全一樣,如果abort()
直接叫是默認terminate()
處理程序做什麼。
如果我省略set_terminate(0);
語句,我正在調用終止處理程序。因此調用set_terminate(0)
似乎會將terminate()
處理程序重置爲默認值。
此行爲僅適用於VC++ 7嗎?如果我在某些其他實現上調用set_terminate(0)
,程序是否會遇到未定義的行爲?
Section 18.6.3.2 :) – Manuel 2010-02-09 11:31:45
所以這是不明確的行爲,不是嗎? – sharptooth 2010-02-09 11:32:14
是的,這是未定義的行爲。您需要存儲以前的處理程序並明確地恢復它。 – 2010-02-09 11:35:03