为什么允许重新定义全球operator new(size_t)
?
据我所知,c ++标准库中存在相同且默认的 operator new(size_t
)(从c ++ Primer 5th中学习)
默认运营商新位于全局命名空间中,为什么用户定义的全局运营商与冲突与默认 ?由于它们处于相同的范围,是否存在重新定义错误?
答案 0 :(得分:6)
标准(语言支持库 - >动态内存管理)说明了这些功能:
可替换:C ++程序可以使用其中任何一个来定义函数 功能签名,从而取代定义的默认版本 通过C ++标准库。
使用程序的定义而不是默认版本 由实现提供([support.dynamic])。这样的替代 在程序启动之前发生([basic.def.odr],[basic.start])。该 程序的声明不应指定为内联。
无需诊断。
替换功能
非保留功能 定义由C ++程序提供[注意:只有一个定义 对于这样的功能,在程序的持续时间内有效 执行,作为创建程序的结果([lex.phases])和 解决所有翻译单位的定义([basic.link])。 - 结束说明]