سؤال

هل تحصل المكدس على غير موصول (المدمر) عند حدوث 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 لعمل ملف أساسي من تطبيق تشغيل بعض الوقت. نحن بعض الوقت استخدم هذه الإشارة إلى تطبيق تصحيح. وبقدر ما أعرف أن المدمرين لا يطلق عليهم هذه الإشارة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top