运算符new和删除重载范围

时间:2014-02-24 19:56:14

标签: c++ linker operator-overloading new-operator

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

运算符new / delete的全局重载在多长时间内生效

  1. 每个翻译单位
  2. 每个链接的应用程序至少有一个目标文件重载这些运算符
  3. 动态链接怎么样?

    这些运营商可以有多种定义吗?如果采取哪一个。

1 个答案:

答案 0 :(得分:4)

全局分配和释放功能适用于整个应用程序,而不是每个翻译单元。由于它们是全球性的,因此除了您认为newnew[]和无限多个可能的展示位置new为“多个定义”的程度外,不能有多个定义。遗憾的是,当你定义自己的时候,没有可移植的方法来调用原始的全局分配函数。

但是,您可以定义特定于类的分配和释放函数。

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


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