任何人都可以解释如果一个新的重载但相应的删除没有在 C++ 中加载会发生什么?
问问题
110 次
1 回答
5
这只是对象构造引发异常时的问题,在 C++11 5.3.4/18 中有描述:
如果找不到明确匹配的解除分配函数,则传播异常不会导致对象的内存被释放。[注:这适用于被调用的分配函数不分配内存的情况;否则,很可能导致内存泄漏。——尾注]
例子:
T * p = new (true, 'x', Blue) T("Jim");
如果T
throws 的构造函数,我们需要一个重载operator delete(void *, bool, char, enum Color)
,无论是在命名空间范围内还是作为 的静态成员T
,如果这个函数不存在,那么就不会调用释放函数。
正如注释所说,对于本质上是无操作的放置新功能,这可能不是问题。但是,如果分配函数做了不平凡的工作,那么将没有匹配的清理函数。
于 2012-10-09T18:01:11.263 回答