【发布时间】:2015-04-06 16:36:08
【问题描述】:
operator delete 能否在内存释放期间抛出异常或以其他方式的错误信号?
另外,operator delete 是否有可能失败,在这种情况下它的默认行为是什么?
ISO 标准对此有何规定?
例如在 Windows 操作系统中 - C++ operator new 和 operator delete 通常通过函数 HeapAlloc 和 HeapFree 实现。后面的函数返回一个布尔值,清楚地表明失败是可能的。想象一下 C++ operator delete 将如何写在上面:
void operator delete(void *pMem)
{
extern HANDLE hHeap;
extern DWORD dwFlags;
BOOL bSuccee = HeapFree(hHeap, dwFlags, pMem);
//return bSuccee ????????????
}
【问题讨论】:
-
cplusplus.com/reference/new/operator%20delete%5B%5D 会有所帮助。保证不会投掷任何球。删除后指针无效。
-
老实说,这有点像比较苹果和橙子......看起来你的问题是 为什么 C++ 不允许
operator delete以确定的行为失败,因为某些操作系统有允许这样做的设施吗? 那么答案将是因为 C++ 可以在许多其他操作系统上运行。 -
你不能写一个返回的操作符删除,因为这是非标准的。
-
@Frédéric Hamidi 这就是我不明白为什么不存在返回布尔值或抛出异常的重载的原因。
-
@FISOCPP,在不支持这种设施的操作系统上会发生什么?显然
delete是否返回某些东西不能依赖于实现(那么你将有两种不同的语言)。如果delete是否能够抛出依赖于实现......我认为任何“真正的”C++ 程序都不能可移植地运行。所以,它是最小公分母。
标签: c++ winapi iso delete-operator