هل تحصل المكدس عند حدوث Sigabrt؟
-
18-09-2019 - |
سؤال
هل تحصل المكدس على غير موصول (المدمر) عند حدوث Sigabrt في C ++؟
شكرا.
المحلول
هذه الإجابة يشير إلى أن المدمرين لا يسمى.
نصائح أخرى
رقم:
$ cat test.cc
#include <iostream>
#include <sys/types.h>
#include <signal.h>
class Test {
public:
~Test() { std::cout << "~Test called" << std::endl; }
};
int main(int argc, char *argv[])
{
Test t = Test();
if (argc > 1) {
kill(0, SIGABRT);
}
return 0;
}
$ g++ test.cc
$ ./a.out
~Test called
$ ./a.out 1
Aborted
لا، استثناءات فقط تحريك المكدس المرافق. إشارات هي جزء من Posix، وهو API C، لذلك ليس "أدرك" مرافق C ++ مثل الاستثناءات.
ال signal(3)
صفحة MAN على صندوق Mac OS X يقول
No Name Default Action Description
...
6 SIGABRT create core image abort program (formerly SIGIOT)
التي تقترح لي أن الافتراضي هو عدم الاسترخاء ...
يتم استخدام Sigrafrt Signal Sigabrt لعمل ملف أساسي من تطبيق تشغيل بعض الوقت. نحن بعض الوقت استخدم هذه الإشارة إلى تطبيق تصحيح. وبقدر ما أعرف أن المدمرين لا يطلق عليهم هذه الإشارة.
لا تنتمي إلى StackOverflow