C++ 14是否要求delete表达式必须调用`void operator :: delete(void*,std :: size_t)`而不是`void :: operator delete(void*)`?

xml*_*lmx 5 c++ memory-management new-operator c++14

根据这个

void operator delete  (void*);                                    (1)   
void operator delete[](void*);                                    (2)   
void operator delete  (void*, const std::nothrow_t&);             (3)   
void operator delete[](void*, const std::nothrow_t&);             (4)   
void operator delete(void*, std::size_t)                          (5)
void operator delete[](void*, std::size_t)                        (6)
void operator delete(void*, std::size_t, const std::nothrow_t&)   (7)
void operator delete[](void*, std::size_t, const std::nothrow_t&) (8)
Run Code Online (Sandbox Code Playgroud)

(5-8)如果提供了用户定义的替换,则调用而不是(1-4).标准库实现与(1-4)相同.

我相信引用的陈述是正确的; 但是,根据C++ 14标准n3797草案,我无法确认.

我检查了3.7.4和18.6,发现没有明确要求删除表达式必须调用void ::operator delete(void*, std::size_t)而不是void ::operator delete(void*)前者存在.

你能把我推荐到标准草案的正确页面吗?

Tem*_*Rex 9

释放函数的选择解释如下:

5.3.5删除[expr.delete]

10如果类型是完整的并且如果解除分配函数查找同时发现只有指针参数的通常释放函数和具有指针参数和大小参数的通常释放函数,那么所选择的释放函数应该是具有两个参数的函数.否则,所选的解除分配函数应该是具有一个参数的函数.