如何将过载的newdelete操作符的作用范围限制在翻译单元(当它们不能成为静态时)。

问题描述 投票:1回答:1

在将项目从Visual Studio 2010转移到2017时,我遇到了一个问题。其中一个项目有全局的静态重载newdelete操作符,在用VS2017编译时,它抛出了一个错误,即newdelete操作符不能被声明为静态(它曾经在VS2010上编译)。但是静态确保了这些重载newdelete的范围具体到一个翻译单元。当不允许有更多的静态newdelete操作符时,如何实现这一点.请帮我提供建议。

c++ visual-studio-2017
1个回答
0
投票

在CPP文件内同时提供声明和定义。这将限制特定编译单元的可见性。


0
投票

当你重载newdelete操作符时,它们是隐式静态的,不需要解析作用域来构造对象。你可以访问 网页 以了解原因。

newdelete 操作符也可以像C++中的其他操作符一样被重载。newdelete 操作符可以全局重载,也可以为特定的类重载。如果这些操作符是通过一个类的成员函数重载的,这意味着这些操作符只为这个特定的类重载。newdelete 将在您使用这些操作符的任何时候被调用(在类内或类外)。这就是全局重载。

所以,你不需要在所有CPP文件中声明和定义这些newdelete函数,因为在CPP文件中包含了早期的头。

© www.soinside.com 2019 - 2024. All rights reserved.