运算符新建和删除重载作用域

Operator new and delete overloading scope

本文关键字:重载 作用域 删除 新建 运算符      更新时间:2023-10-16

我偶然发现了一些关于运算符new和delete的链接和重载的问题。

运营商新增/删除的全球过载会在多大程度上影响

  1. 每个翻译单位
  2. 至少有一个对象文件重载这些运算符的每个链接应用程序

动态链接怎么样?

这些运算符可以有多种定义吗?如果哪一个被拿走了。

全局分配和解除分配函数适用于整个应用程序,而不是每个翻译单元。由于它们是全局的,所以不可能有多个定义,除非你认为newnew[]和无限多个可能的位置new是"多个定义"。特别是,不幸的是,当您定义自己的全局分配函数时,没有可移植的方法来调用原始全局分配函数。

但是,您可以定义类特定的分配和解除分配函数。

如果您想避免在new-表达式中使用特定于类的分配函数,可以使用::前缀,即编写::new T,这对于调用标准库的位置new是个好主意。


关于"动态链接是什么?"你的意思还不清楚。C++有静态链接、外部链接和无链接,但没有动态链接。可能您指的是动态库(如Windows DLL),这是一个非常棘手的问题。C++标准不直接支持动态库。在实践中,一种安全的方法是不提供自己的全局分配/解除分配,而是动态链接所有内容(在Windows中,这意味着使用动态链接的运行库)。