AnA*_*ons 3 c++ winapi iso delete-operator
在内存解除分配期间,操作符删除是否可以抛出异常或以其他方式发出错误信号?
换句话说,是否有可能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 ????????????
}
Run Code Online (Sandbox Code Playgroud)
在 C++11 18.6 中,delete 被定义为noexcept函数。从第 5.3.5 节删除
\n\n\n如果操作数是类类型,则通过调用上述转换函数将操作数转换为指针类型,并在本节的其余部分中使用转换后的操作数代替原始操作数。在第一个替代方案(删除对象)中,delete 操作数的值可以是空指针值、指向由先前的 new 表达式创建的非数组对象的指针,或者指向表示 a 的子对象 (1.8) 的指针。此类对象的基类(第 10 条)。如果不是,则行为未定义。在第二种选择(删除数组)中,delete 操作数的值可以是空指针值或由前一个数组 new-expression 产生的指针值。82如果不是,则行为未定义。[注意:这意味着delete表达式的语法必须与new分配的对象的类型匹配,而不是new表达式的语法。\xe2\x80\x94结束注
\n
强调我的
\n\n由此我们可以看出,以不应该使用的方式使用delete是UB。
\n