运算符新建和删除重载作用域
Operator new and delete overloading scope
我偶然发现了一些关于运算符new和delete的链接和重载的问题。
运营商新增/删除的全球过载会在多大程度上影响
- 每个翻译单位
- 至少有一个对象文件重载这些运算符的每个链接应用程序
动态链接怎么样?
这些运算符可以有多种定义吗?如果哪一个被拿走了。
全局分配和解除分配函数适用于整个应用程序,而不是每个翻译单元。由于它们是全局的,所以不可能有多个定义,除非你认为new
、new[]
和无限多个可能的位置new
是"多个定义"。特别是,不幸的是,当您定义自己的全局分配函数时,没有可移植的方法来调用原始全局分配函数。
但是,您可以定义类特定的分配和解除分配函数。
如果您想避免在new
-表达式中使用特定于类的分配函数,可以使用::
前缀,即编写::new T
,这对于调用标准库的位置new
是个好主意。
关于"动态链接是什么?"你的意思还不清楚。C++有静态链接、外部链接和无链接,但没有动态链接。可能您指的是动态库(如Windows DLL),这是一个非常棘手的问题。C++标准不直接支持动态库。在实践中,一种安全的方法是不提供自己的全局分配/解除分配,而是动态链接所有内容(在Windows中,这意味着使用动态链接的运行库)。
相关文章:
- 未在作用域中声明unordered_map
- 有没有一种方法可以在编译时获得作用域类名
- C++quit()函数中可能存在作用域问题
- 未在此作用域OpenCV3.4中声明cvSaveImage
- 全局作用域中函数指针的赋值
- 在类函数中初始化外部作用域变量
- 不同作用域中的静态变量和全局变量
- 是同一作用域的函数部分中的函数调用
- 未在此作用域中声明的函数和变量 (C++)
- 类作用域的类型别名"using":[何时]方法中的用法可以先于类型别名?
- 将作用域枚举转换为基础类型
- 表达式必须具有完整或无作用域的枚举图
- 在构造函数中输入对象时C++类成员作用域
- 无法让"std::enable_if"适用于无作用域枚举
- 错误:表达式必须具有算术、无作用域枚举或带有运算符重载的指针类型
- 重载时未在 C++ 的作用域错误中声明
- 运算符新建和删除重载作用域
- 运算符重载中的作用域规则
- 如何重载作用域枚举的运算符>?
- 重载操作符+:表达式必须是整型或无作用域枚举类型