4

任何人都可以解释如果一个新的重载但相应的删除没有在 C++ 中加载会发生什么?

4

1 回答 1

5

这只是对象构造引发异常时的问题,在 C++11 5.3.4/18 中有描述:

如果找不到明确匹配的解除分配函数,则传播异常不会导致对象的内存被释放。[注:这适用于被调用的分配函数不分配内存的情况;否则,很可能导致内存泄漏。——尾注]

例子:

T * p = new (true, 'x', Blue) T("Jim");

如果Tthrows 的构造函数,我们需要一个重载operator delete(void *, bool, char, enum Color),无论是在命名空间范围内还是作为 的静态成员T,如果这个函数不存在,那么就不会调用释放函数。

正如注释所说,对于本质上是无操作的放置新功能,这可能不是问题。但是,如果分配函数做了不平凡的工作,那么将没有匹配的清理函数。

于 2012-10-09T18:01:11.263 回答