Hi Further info on this – by default C++ 11 always calls terminate() if a destructor throws an exception
You can override this with noexcept(false) on the destructor, but the run time will still call terminate() if it’s already processing an exception (as in my code example) Given the range of different compilers PoDoFo needs to support I don’t think you can ever safely throw an exception in a PoDoFo destructor Best Regards Mark On 22/01/2017, 13:11, "Mark Rogers" <mark.rog...@powermapper.com> wrote: Hi If a destructor called during stack unwinding throws an exception, then C++ guarantees the process will be killed by calling terminate() https://isocpp.org/wiki/faq/exceptions#dtors-shouldnt-throw http://stackoverflow.com/questions/5798107/c-throwing-an-exception-from-a-destructor That means any code like this terminates the process, instead of reporting an exception: Try { PdfPainter painter; Painter.SetPage( pCanvas )); // calls PODOFO_RAISE_ERROR because gray out of range, // but could be any PoDoFo method that raises an exception PdfPainter:: SetStrokingGray( 1.1 ); // never reaches here if an exception is thrown Painter.FinishPage(); } catch ( PoDoFo::PdfError& error ) { // ~PdfPainter is called before handling this, but FinishPaint hasn’t been called // so ~PdfPainter throws an exception, which then terminates the application // because an exception is already being handled error.PrintErrorMsg(); } If an exception isn’t being handled when ~ PdfPainter throws an exception then: - the behavior is undocumented - throwing in the destructor when destroying an array or collection of PdfPainters means some destructors are never called Best Regards Mark Mark Rogers - mark.rog...@powermapper.com PowerMapper Software Ltd - www.powermapper.com Registered in Scotland No 362274 Quartermile 2 Edinburgh EH3 9GL On 22/01/2017, 11:02, "zyx" <z...@litepdf.cz> wrote: On 20.1.2017 20:49, Mark Rogers wrote: > There‘s a problem in release builds. PdfPainter::~PdfPainter throws > exceptions in release builds because PODOFO_ASSERT throws exceptions > via PODOFO_RAISE_ERROR_INFO in release builds Hi, that's after one of my changes. > if( m_pCanvas ) PdfError::LogMessage( eLogSeverity_Error, > "PdfPainter::~PdfPainter(): FinishPage() has to be called after a > page is completed!" ); Are you sure you call the FinishPage() before the PdfPainter is destroyed? The error suggests that it's not done, but it should be. Alternatively, if you face this in any of the PoDoFo examples or tools, then they are supposed to be fixed. In other words, I believe that this error is valid and should not be muted for non-debug builds. Bye, zyx -- http://www.litePDF.cz i...@litepdf.cz ------------------------------------------------------------------------------ Check out the vibrant tech community on one of the world's most engaging tech sites, SlashDot.org! http://sdm.link/slashdot _______________________________________________ Podofo-users mailing list Podofo-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/podofo-users ------------------------------------------------------------------------------ Check out the vibrant tech community on one of the world's most engaging tech sites, SlashDot.org! http://sdm.link/slashdot _______________________________________________ Podofo-users mailing list Podofo-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/podofo-users ------------------------------------------------------------------------------ Check out the vibrant tech community on one of the world's most engaging tech sites, SlashDot.org! http://sdm.link/slashdot _______________________________________________ Podofo-users mailing list Podofo-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/podofo-users