c++ 14是否要求delete表达式必须调用' void operator::delete(void*, std::

Does C++14 require that the delete expression must call `void operator ::delete(void*, std::size_t)` instead of `void ::operator delete(void*)`?

本文关键字:delete void operator std 调用 是否 表达式 c++      更新时间:2023-10-16

根据此

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)

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

我相信引用的语句是正确的;但是,我不能确认它是否符合c++ 14标准草案n3797。

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

你能把标准草案的右页给我看一下吗?

释放函数的选择说明如下:

5.3.5 Delete [expr.delete]

10如果类型是完整的,如果解分配函数查找找到一个普通的释放函数,只有一个指针形参和一个通常的释放函数,带有指针形参和大小参数,则选择的回收函数为有两个参数。否则,选中的回收函数应该是只有一个参数的函数