首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C++14是否要求删除表达式必须调用‘void :: delete (void*,std::size_t)’,而不是调用‘void::操作符删除(void*)’?

C++14是否要求删除表达式必须调用‘void :: delete (void*,std::size_t)’,而不是调用‘void::操作符删除(void*)’?
EN

Stack Overflow用户
提问于 2014-07-07 06:00:40
回答 1查看 338关注 0票数 5

根据

代码语言:javascript
复制
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*) (如果存在的话)。

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-07-07 06:19:08

对取消分配职能的选择解释如下:

5.3.5删除expr.delete

10如果类型是完全的,并且如果去分配函数查找finds同时具有一个指针参数的通常的去分配函数和一个同时具有指针参数和大小参数的通常的去分配函数,那么所选的去分配函数应该是具有两个参数的函数。否则,所选的去分配函数将是具有一个参数的函数。

票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24603894

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档