Domanda

Ho avuto l'impressione che l'utilizzo setjmp() e longjmp() in C ++ è stato quasi garantito per rovinare lo stack, dal momento che queste funzioni non eseguono svolgimento come, ad esempio, le eccezioni fanno. Questa pagina MSDN , tuttavia, indica che l'implementazione Microsoft può essere detto per invocare i distruttori di oggetti locali, il che implica che un uso attento di queste funzioni potrebbe essere al sicuro.

C'è un mezzo portatili per garantire la correttezza del programma quando si utilizza setjmp() e longjmp() in C ++? Buone pratiche nella C ++ indicano che le eccezioni meglio non sono utilizzati per il controllo del flusso, ma in una situazione che richiede un flusso molto insolito (ad esempio, coroutine e chiusure), è sempre preferibile utilizzare le eccezioni al posto di queste funzioni?

È stato utile?

Soluzione

Se avete qualche requisito davvero strano che non consente di controllare il flusso del programma normalmente, condizionali / Loop / pause, io preferirei usare un'eccezione sopra JMP.

Esistono scenari in cui usando un'eccezione per controllare il flusso è accettabile. Credo che una delle funzioni di ricerca di Boost.Graph genera un'eccezione per tornare rapidamente al chiamante dal profondo ricorsione.

Altri suggerimenti

li ho usato prima, ma solo sotto una circostanza: stavo creando un kernel del sistema operativo in C per una classe di sistema operativo; sono stati utilizzati per la gestione delle eccezioni.

La mia comprensione è che vengono usati per la gestione quando si tratta di codice di basso livello, come un sistema operativo un'eccezione. Per il software generale C ++, mi basta usare try catch.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top