根据this
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,发现没有明确要求删除表达式必须调用void ::operator delete(void*, std::size_t)
而不是void ::operator delete(void*)
如果前者存在。
您能否将我推荐到标准草案的正确页面?
答案 0 :(得分:9)
解除分配函数的选择解释如下:
5.3.5删除[expr.delete]
10如果类型完成且解除分配函数查找结果 通常的释放函数,只有一个指针参数和一个 通常的释放函数,包含指针参数和大小 参数,然后选择的释放函数应该是一个 有两个参数。否则,选择解除分配功能 应该是带有一个参数的函数。