use*_*329 3 c++ linker operator-overloading new-operator
我偶然发现了一些关于运算符 new 和 delete 的链接和重载的问题。
运算符 new/delete 的全局重载在多大程度上生效
动态联动呢?
这些运算符可以有多个定义吗?如果取哪一个。
全局分配和解除分配功能是针对整个应用程序的,而不是针对每个翻译单元的。因为他们是全球不可能有多个定义,除非你考虑的程度new
,new[]
和可能放置无限多的new
是“多重定义”。特别是,不幸的是,当您定义自己的全局分配函数时,没有可移植的方法来调用原始的全局分配函数。
但是,您可以定义特定于类的分配和解除分配函数。
如果您想避免在 - 表达式中new
使用特定于类的分配函数,您可以使用::
前缀,即写作::new T
,这是调用标准库的放置的好主意new
。
关于“动态联动怎么样?” 不清楚你的意思。C++有静态链接、外部链接和无链接,但没有动态链接。可能您指的是动态库(如 Windows DLL),这是一个非常棘手的问题。C++ 标准不直接支持动态库。在实践中确保安全的一种方法是不提供您自己的全局分配/释放,并动态链接所有内容(在 Windows 中,这意味着使用动态链接的运行时库)。