我遇到了这个我通常会用“不要那样做”来驳回的边缘问题,但我在标准中找不到令人满意的答案,如果有人能指出原因,我将不胜感激:
假设我有一个在析构函数中引发异常的类:
struct Foo { ~Foo() { throw std::runtime_error("Catch this!"); } };
如果我删除该类的动态分配实例,动态分配的内存会发生什么情况?
auto p = new Foo;
try { delete p; }
catch (std::exception const &) { }
是否调用了释放函数?为什么?我可以通过添加operator delete(p);
到catch
块中使此代码正确吗?
我用 GCC 进行了一个小测试,它似乎不会自动释放内存。(将此与构造函数中的异常进行对比,在这种情况下,保证会调用释放函数(如果存在)。)