关于C++;新全球运营商:为什么可以更换 我在VS2005编写了一个小程序来测试C++全局运算符new是否可以重载。它可以 #include "stdafx.h" #include "iostream" #include "iomanip" #include "string" #include "new" using namespace std; class C { public: C() { cout<<"CTOR"<<endl; } }; void * operator new(size_t size) { cout<<"my overload of global plain old new"<<endl; // try to allocate size bytes void *p = malloc(size); return (p); } int main() { C* pc1 = new C; cin.get(); return 0; } #包括“stdafx.h” #包括“iostream” #包括“iomanip” #包括“字符串” #包括“新的” 使用名称空间std; C类{ 公众: C(){cout

关于C++;新全球运营商:为什么可以更换 我在VS2005编写了一个小程序来测试C++全局运算符new是否可以重载。它可以 #include "stdafx.h" #include "iostream" #include "iomanip" #include "string" #include "new" using namespace std; class C { public: C() { cout<<"CTOR"<<endl; } }; void * operator new(size_t size) { cout<<"my overload of global plain old new"<<endl; // try to allocate size bytes void *p = malloc(size); return (p); } int main() { C* pc1 = new C; cin.get(); return 0; } #包括“stdafx.h” #包括“iostream” #包括“iomanip” #包括“字符串” #包括“新的” 使用名称空间std; C类{ 公众: C(){cout,c++,C++,是的,全局运算符new的特殊之处在于,程序可以为其提供替换实现 可替换表单是操作符新建和操作符删除以及“禁止抛出”变体的单个对象和数组表单。其他表单,例如placement new,是不可替换的。请注意,您应该始终为您实现的每个操作符新建执行匹配的操作符删除。(我知道这只是为了表明你的观点,但我无法让自己在没有这一警告的情况下坚持下去。)也许你应该编辑问题的标题,我以为你想知道替换它的各种用途,而实际上你想知道为什么替换它不会引起错误。

是的,全局
运算符new
的特殊之处在于,程序可以为其提供替换实现


可替换表单是
操作符新建
操作符删除
以及“禁止抛出”变体的单个对象和数组表单。其他表单,例如placement new,是不可替换的。

请注意,您应该始终为您实现的每个
操作符新建
执行匹配的
操作符删除
。(我知道这只是为了表明你的观点,但我无法让自己在没有这一警告的情况下坚持下去。)也许你应该编辑问题的标题,我以为你想知道替换它的各种用途,而实际上你想知道为什么替换它不会引起错误。