我正在阅读Meyers编写的"Effective C++",并且遇到了"翻译单元"一词.
有人可以给我一个解释:
1)究竟是什么
2)在使用C++编程时,我应该何时考虑使用它
3)如果它只与C++有关,或者它可以与其他编程语言一起使用
我可能已经在不知道术语的情况下使用它了....
我正在尝试重载全局运算符new和删除性能敏感的应用程序.我已经阅读了http://www.informit.com/articles/article.aspx?p=30642&seqNum=3中描述的问题以及使用英特尔TBB分配器的建议http://www.intel.com/technology/itj/ 2007/v11i4/5-基金会/ 5-memory.htm
由于我第一次超载新的和删除,我有几个问题.
我应该在包含"新"调用的所有文件中包含我的新标题Allocator.h(或Pre.h),其中包含重载的新函数吗?这很乏味.
或者我应该在每个翻译单元中使用包含Allocator.h(之前)的"gcc -include Allocator.h ..."?我希望尽可能保持代码平台的独立性.所有编译器都支持类似于"gcc -include"的东西吗?
我偶然发现了一些关于运算符 new 和 delete 的链接和重载的问题。
运算符 new/delete 的全局重载在多大程度上生效
动态联动呢?
这些运算符可以有多个定义吗?如果取哪一个。
这个问题来自我之前的一个问题:为什么 C++ 运算符 new/delete/variants 不应该出现在头文件中?. 快速总结一下,我正在学习覆盖全局 operator new、delete等。我现在需要一个自定义分配器类(我的重载 operator new call std::set::insert(...),它本身似乎是 call new,因此无限回避)。我认为,如果我向我提供自定义分配器(例如,使用malloc而不是new),我std::set可以绕过无限递归。
我已经阅读了一些关于实现自定义分配器的文章,但对struct rebind.
这里有一个很好的问答:解析分配器::重新绑定调用,但我仍然对一个特定项目感到困惑。cplusplus.com 说struct rebind:
它的成员类型 other 是分配类型类型元素的等效分配器类型
我不明白怎么other是其成员struct rebind。struct rebind我发现的定义如下:
template <class Type> struct rebind {
typedef allocator<Type> other;
};
Run Code Online (Sandbox Code Playgroud)
我看不出other是一个成员变量struct rebind。这只是typedefed。如果我typedef int foo;在全局命名空间中做了,那并不意味着int在全局命名空间中声明了一个类型为全局的变量,那么反过来,如何other成为 的成员struct …
我知道new并且delete是关键词.
int obj = new int;
delete obj;
int* arr = new int[1024];
delete[] arr;
Run Code Online (Sandbox Code Playgroud)
<new>header是C++标准头文件的一部分.它有两个运算符(我不确定它们是运算符还是函数):
::operator new
::operator delete
这些运算符使用如下:
#include <new>
using namespace std;
int* buff = (int*)::operator new(1024 * sizeof(int));
::operator delete(buff);
Run Code Online (Sandbox Code Playgroud)
什么是":: operator new"和":: operator delete"?它们new与delete关键字不同吗?