Tag: 内存泄漏的

谁删除在“新”操作期间分配的内存,在构造函数中有exception?

我真的不敢相信我找不到明确的答案 如何释放在C ++类构造函数抛出exception后分配的内存,在使用new运算符初始化的情况下。 例如: class Blah { public: Blah() { throw "oops"; } }; void main() { Blah* b = NULL; try { b = new Blah(); } catch (…) { // What now? } } 当我尝试了这一点, b在catch块中是NULL(这是有道理的)。 在debugging的时候,我注意到conrol在进入构造函数前进入内存分配例程。 这在MSDN网站上似乎证实了这一点 : 当使用new为C ++类对象分配内存时,将在分配内存后调用该对象的构造函数。 所以,请记住,局部variablesb从来没有被分配(即在catch块中是NULL),你如何删除分配的内存? 在这个问题上得到一个跨平台的答案也是很好的。 即C ++规范说什么? 澄清:我不是在谈论这个类在c'tor中分配内存然后抛出的情况。 我明白,在这种情况下,决不会被召唤。 我正在讨论用于分配对象的内存(在我的例子中是Blah )。