if(UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone)
и
if(UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)
Макросы UI_USER_INTERFACE_IDIOM () также работают в старых версиях iOS, таких как iOS 3.0, без сбоев.
РЕДАКТИРОВАТЬ: SIGINT, а не SIGTERM. И Assaf сообщает, что никакие объекты не уничтожаются (по крайней мере, в Windows) для необработанного SIGINT.
Система отправляет SIGINT. Эта концепция применяется (с некоторыми отклонениями) для всех реализаций C. Чтобы обработать это, вы вызываете signal, указывая обработчик сигнала. См. Документацию по сигнальной функции в Open Group и MSDN .
Второй вопрос немного сложнее и может зависеть от реализации. Лучше всего обрабатывать сигнал, что позволяет использовать delete
и exit ()
вручную.
Вы можете проверить, происходит ли раскрутка стека, с помощью некоторого простого кода:
#include <iostream>
#include <windows.h>
using namespace std;
struct A {
~A() { cerr << "unwound" << endl; }
};
int main() {
A a;
while(1) {
Sleep(1000);
}
}
Произойдет ли это, не должно зависеть от реализации, в зависимости от того, как среда выполнения обрабатывает Ctrl-C. По моему опыту, этого не происходит.
Ctrl-C в консольном приложении сгенерирует сигнал. По умолчанию обработчик этого сигнала вызывает ExitProcess для завершения приложения. Вы можете изменить это поведение, установив свои собственные функции-обработчики для сигнала, используя функцию SetConsoleCtrlHandler .