http://gcc.gnu.org/bugzilla/show_bug.cgi?id=55635



             Bug #: 55635

           Summary: Deallocation function ("operator delete") not called

                    when destructor throws exception

    Classification: Unclassified

           Product: gcc

           Version: 4.7.2

            Status: UNCONFIRMED

          Severity: normal

          Priority: P3

         Component: c++

        AssignedTo: unassig...@gcc.gnu.org

        ReportedBy: joedoefawnb...@googlemail.com





According to C++11, 5.3.5/7, the deallocation function of a dynamically

allocated object must be called upon a `delete` expression regardless of

whether the destructor exits with an exception or not.



However, when I run the following code through valgrind, it says that I have

one still-reachable block:



struct Foo { ~Foo() { throw 0; } };



int main()

{

    auto p = new Foo;

    try { delete p; }

    catch (...) { }

}



Am I reading the standard right that the memory should be deallocated

regardless?



(SO discussion: http://stackoverflow.com/q/13792981/596781)

Reply via email to