c++ - 运算符 new 和 delete 重载作用域

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

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

operator new/delete 的全局重载多久生效

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

动态链接呢?

这些运算符可以有多个定义吗?如果拿哪个。

最佳答案

全局分配和释放函数是针对整个应用程序的,而不是每个翻译单元。由于它们是全局的,因此不能有多个定义,除非您考虑 newnew[] 和无限数量的可能放置 new 为“多重定义”。不幸的是,特别是当您定义自己的函数时,没有可移植的方法来调用原始的全局分配函数。

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

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


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

关于c++ - 运算符 new 和 delete 重载作用域,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21997668/

相关文章:

c++ - 二维 vector 中的运算符 []

c++ - 基方法/运算符在派生(C++)上调用时返回基类型?

c++ - 什么时候应该在非成员函数之前写关键字 'static'?

c++ - 链接器错误让我头疼

c++ - 在 C++ 中为两个参数使用 const 覆盖运算符

c++ - 这是实现通用 operator== 和 operator< 的安全方法吗?

c++ - 一个类 C++ (Arduino) 中的多个头文件

c++ - C++03 和 C++11 之间的未定义行为有什么区别?

windows - 混合来自不同版本的 Visual Studio 的库时的运行时问题

c++ - enable_if 和转换运算符?