我偶然发现了一些关于operator new和delete的链接和重载的问题。
运算符new / delete的全局重载在多长时间内生效
动态链接怎么样?
这些运营商可以有多种定义吗?如果采取哪一个。
答案 0 :(得分:4)
全局分配和释放功能适用于整个应用程序,而不是每个翻译单元。由于它们是全球性的,因此除了您认为new
,new[]
和无限多个可能的展示位置new
为“多个定义”的程度外,不能有多个定义。遗憾的是,当你定义自己的时候,没有可移植的方法来调用原始的全局分配函数。
但是,您可以定义特定于类的分配和释放函数。
如果你想避免在new
- 表达式中选择特定于类的分配函数,你可以使用::
前缀,即编写::new T
,这是一个好主意调用标准库的展示位置new
。
关于“动态链接怎么样?”目前还不清楚你的意思。 C ++具有静态链接,外部链接和无链接,但不具有动态链接。可能你指的是动态库(比如Windows DLL),这是一个非常棘手的问题。 C ++标准没有直接支持动态库。在实践中安全的一种方法是不提供自己的全局分配/释放,并动态链接所有内容(在Windows中这意味着使用动态链接的运行时库)。