KnowledgeHub
Questions
Tags
Users
Search
Alex Rivera
|
Logout
Edit Question
Title
Body
I really can't believe I couldn't find a clear answer to this... How do you free the memory allocated after a C++ class constructor throws an exception, in the case where it's initialised using the new operator. E.g.: class Blah { public: Blah() { throw "oops"; } }; void main() { Blah* b = NULL; try { b = new Blah(); } catch (...) { // What now? } } When I tried this out, b is NULL in the catch block (which makes sense). When debugging, I noticed that the conrol enters the memory allocation routine BEFORE it hits the constructor. This on the MSDN website seems to confirm this : When new is used to allocate memory for a C++ class object, the object's constructor is called after the memory is allocated. So, bearing in mind that the local variable b is never assigned (i.e. is NULL in the catch block) how do you delete the allocated memory? It would also be nice to get a cross platform answer on this. i.e., what does the C++ spec say? CLARIFICATION: I'm not talking about the case where the class has allocated memory itself in the c'tor and then throws. I appreciate that in those cases the d'tor won't be called. I'm talking about the memory used to allocate THE object ( Blah in my case).
Tags (comma-separated)
Save Edits
Cancel