为什么允许重新定义全局运算符new(size_t)?

时间:2018-02-08 09:52:39

标签: c++

为什么允许重新定义全球operator new(size_t)

据我所知,c ++标准库中存在相同且默认的 operator new(size_t(从c ++ Primer 5th中学习)

默认运营商新位于全局命名空间中,为什么用户定义的全局运营商冲突与默认 ?由于它们处于相同的范围,是否存在重新定义错误?

1 个答案:

答案 0 :(得分:6)

标准(语言支持库 - >动态内存管理)说明了这些功能:

[new.delete.single]

  

可替换:C ++程序可以使用其中任何一个来定义函数   功能签名,从而取代定义的默认版本   通过C ++标准库。

[replacement.functions]

  

使用程序的定义而不是默认版本   由实现提供([support.dynamic])。这样的替代   在程序启动之前发生([basic.def.odr],[basic.start])。该   程序的声明不应指定为内联。

     

无需诊断。

[defns.replacement]

  

替换功能

     

非保留功能   定义由C ++程序提供[注意:只有一个定义   对于这样的功能,在程序的持续时间内有效   执行,作为创建程序的结果([lex.phases])和   解决所有翻译单位的定义([basic.link])。    - 结束说明]