Mieszanie C (struktura) i wyjątki C++
Jeśli chcesz napisać kod przenośny, używając strukturalnej obsługi wyjątków w program w języku C++ nie jest zalecane.Jednak czasami warto skompilować z /EHa i wymieszać wyjątki strukturalne i kodu źródłowego języka C++ oraz potrzebę niektórych funkcji obsługi oba rodzaje wyjątki.Ponieważ obsługa structured exception ma koncepcji obiektów lub wpisany wyjątki, nie może obsłużyć wyjątki generowane przez kodu C++; Jednakże C++ połowu obsługi może obsłużyć wyjątki strukturalne.Jako takie, Obsługa składni wyjątków C++ (Spróbuj, throw, połowu) nie jest akceptowane przez kompilator C, ale strukturalnej składni obsługi wyjątków (__try, __except, __finally) jest obsługiwana przez kompilator C++.
Zobacz _set_se_translator Aby uzyskać informacje dotyczące obsługi wyjątki strukturalne jako wyjątki C++.
Jeśli użytkownik wymieszać strukturę i wyjątki C++ pamiętać o następujących kwestiach:
Wyjątki C++ a wyjątki strukturalne nie może być mieszane w obrębie tej samej funkcji.
Procedury obsługi sytuacji krańcowych (__finally bloków) są zawsze wykonywane, nawet w trakcie niekontrolowanej po jest wyjątek.
Obsługa wyjątków C++ może przechwycić i Zachowaj relaks semantykę we wszystkich modułach skompilowany z /EH opcję kompilatora (Ta opcja umożliwia relaks semantykę).
Może to być sytuacje, w których destruktora funkcje nie są nazywane dla wszystkich obiektów.Na przykład jeśli structured exception występuje podczas próby nawiązania funkcji wywołania poprzez do niezainicjowanego wskaźnika funkcji i że funkcja przyjmuje jako obiekty parametry, które zostały zbudowane przed wywołaniem, te obiekty nie będą miały swoich destruktorów wywoływana podczas unwind stosu.