std::cout in destructoren



  • kann das zu segfaults führen? Irgendwie hab ich gerade mitbekommen das wenn ich kurz vorm ableben eines objektes noch ein out schreiben will es dazu führen kann das eben dort etwas böse in die hose geht. Kurzum es ein segfault wirft. Das was ausgegeben wird verzerrt wird etc. Vor allem wenn es sich dabei noch um threads handelt aber auch so.

    Ist das verhalten bekannt? Sollte man generell sowas nicht machen?

    Der Debugger bringt mir da halt ne meldung das irgend eine exception nicht gefangen wurde und das in der 10. unterfunktion. aber ich glaube in den meisten fällen kommts einfach zum segfault.



  • Naja, du solltest nur dafür sorgen, dass im Destruktor keine Exception nicht aufgefangen wird, ansonsten kannst du da machen, was du willst. Mach doch mal einen try-catch-Block um den entsprechenden Code:

    ~Bla ()
    {
        try
        {
            // ...
        }
        catch (std::exception const& e)
        {
            std::cerr << e.what () << std::endl;
        }
        catch (...)
        {}
    }
    

    Ansonsten wäre es natürlich hilfreich, zu sehen wie der Destruktor aussieht.



  • .filmor schrieb:

    ...

    ~Bla ()
    {
        try
        {
            // ...
        }
        catch (std::exception const& e)
        {
            std::cerr << e.what () << std::endl;
        }
        catch (...)
        {}
    }
    

    ...

    Kann der operator<<() nicht auch eine exception werfen ? 😉
    Dann müsste da auch nochmal ein try/catch drum....

    Gruß,

    Simon2.



  • Ja, kann er, wenn der Stream einen Fehler meldet und du seine Expections angeschaltet hast - aber dann ist eigentlich alles zu spät.


Anmelden zum Antworten