Combinazione di C () strutturata e eccezioni C++
Se si desidera scrivere codice più portabile, utilizzare la gestione delle eccezioni strutturata in un programma C++ non è consigliato.Tuttavia, talvolta può essere necessario compilare con /EHa ed eccezioni strutturate combinazione e il codice sorgente C++ e sono necessarie alcune funzionalità per gestire entrambi i tipi di eccezioni.Poiché un gestore di eccezioni strutturato non riconosce di oggetti o delle eccezioni tipizzate, non può gestire le eccezioni generate da codice C++, tuttavia, C++ catch i gestori possono gestire le eccezioni strutturate.Di conseguenza, la sintassi di gestione delle eccezioni C++ (prova, throw, catchnon viene accettato dal compilatore C, ma la sintassi di gestione delle eccezioni strutturata (__try, __except, __finally) è supportato dal compilatore C++.
vedere _set_se_translator per informazioni sulla gestione delle eccezioni strutturato come eccezioni C++.
Se si combina le eccezioni C++ e strutturata, tenere presente quanto segue:
Le eccezioni C++ e le eccezioni strutturate non possono essere combinati all'interno della stessa funzione.
gestori di terminazione (__finally i blocchi vengono sempre eseguiti, persino durante la rimozione dopo che viene generata un'eccezione.
La gestione delle eccezioni C++ può intercettare e mantenere la semantica di rimozione in tutti i moduli compilati con /EH opzione del compilatore (questa opzione consente la semantica di rimozione).
Possono essere presenti alcune situazioni in cui le funzioni del distruttore non vengono chiamate per tutti gli oggetti.Ad esempio, se un'eccezione strutturata si verifica durante il tentativo di effettuare una chiamata di funzione tramite un puntatore a funzione non inizializzata e tale funzione accetta come oggetti di parametri che sono stati creati prima della chiamata, gli oggetti non disporrà di distruttori chiamati durante lo stack per rimuovere.