在将项目从Visual Studio 2010转移到2017时,我遇到了一个问题。其中一个项目有全局的静态重载newdelete操作符,在用VS2017编译时,它抛出了一个错误,即newdelete操作符不能被声明为静态(它曾经在VS2010上编译)。但是静态确保了这些重载newdelete的范围具体到一个翻译单元。当不允许有更多的静态newdelete操作符时,如何实现这一点.请帮我提供建议。
在CPP文件内同时提供声明和定义。这将限制特定编译单元的可见性。
当你重载newdelete操作符时,它们是隐式静态的,不需要解析作用域来构造对象。你可以访问 网页 以了解原因。
的 new
和 delete
操作符也可以像C++中的其他操作符一样被重载。new
和 delete
操作符可以全局重载,也可以为特定的类重载。如果这些操作符是通过一个类的成员函数重载的,这意味着这些操作符只为这个特定的类重载。new
和 delete
将在您使用这些操作符的任何时候被调用(在类内或类外)。这就是全局重载。
所以,你不需要在所有CPP文件中声明和定义这些newdelete函数,因为在CPP文件中包含了早期的头。