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

5
根据这里的说明:
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*)(如果前者存在)。您能否告诉我草案标准的正确页面?
1个回答

9

释义:删除函数的选择在以下部分进行说明:

5.3.5 Delete [expr.delete]

10 如果类型是完整的,且如果 deallocation 函数查找到只有一个指针参数的常规 deallocation 函数以及一个指针参数和大小参数都有的常规 deallocation 函数,则所选定的 deallocation 函数应该是具有两个参数的函数。否则,所选定的 deallocation 函数应该是具有一个参数的函数。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接