相关疑难解决方法(0)

什么是C++中的"翻译单元"

我正在阅读Meyers编写的"Effective C++",并且遇到了"翻译单元"一词.

有人可以给我一个解释:

1)究竟是什么

2)在使用C++编程时,我应该何时考虑使用它

3)如果它只与C++有关,或者它可以与其他编程语言一起使用

我可能已经在不知道术语的情况下使用它了....

c++

221
推荐指数
6
解决办法
6万
查看次数

在C++中重载全局运算符new/delete

我正在尝试重载全局运算符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"的东西吗?

c++ operator-overloading

8
推荐指数
1
解决办法
1万
查看次数

运算符 new 和 delete 重载范围

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

运算符 new/delete 的全局重载在多大程度上生效

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

动态联动呢?

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

c++ linker operator-overloading new-operator

3
推荐指数
1
解决办法
1482
查看次数

struct rebind::other 是什么意思?

这个问题来自我之前的一个问题:为什么 C++ 运算符 new/delete/variants 不应该出现在头文件中?. 快速总结一下,我正在学习覆盖全局 operator newdelete等。我现在需要一个自定义分配器类(我的重载 operator new call std::set::insert(...),它本身似乎是 call new,因此无限回避)。我认为,如果我向我提供自定义分配器(例如,使用malloc而不是new),我std::set可以绕过无限递归。

我已经阅读了一些关于实现自定义分配器的文章,但对struct rebind.

这里有一个很好的问答:解析分配器::重新绑定调用,但我仍然对一个特定项目感到困惑。cplusplus.com 说struct rebind

它的成员类型 other 是分配类型类型元素的等效分配器类型

我不明白怎么other是其成员struct rebindstruct 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 …

c++ memory memory-management

2
推荐指数
1
解决办法
372
查看次数

什么是":: operator new"和":: operator delete"?

我知道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"?它们newdelete关键字不同吗?

c++ new-operator delete-operator operator-keyword

1
推荐指数
3
解决办法
2610
查看次数