new-operator相关内容

Malloc vs新 - 不同的填充

我正在审查我们的项目的其他人的C ++代码,该项目使用MPI进行高性能计算(10 ^ 5 - 10 ^ 6个核心)。该代码旨在允许在不同架构上的(可能)不同的机器之间进行通信。他写了一个注释,说明了一些符合以下内容: 我们通常使用 new 和 delete ,但这里我使用 malloc 和 c $ c>。这是必要的,因为当使用 new 时,一些编译器将以不同的方式填充数据,导致在不同平台之间 ..
发布时间:2016-10-14 23:01:25 C/C++开发

什么时候应该使用C ++中的新运算符

假设我有一个名为 Money 的类,其中包含参数 Dollars 和 Cents 我可以通过以下两种方式初始化它: Money a(3,15); Money * b = new Money(3,15); b $ b 我的问题是我应该何时使用(1)和何时使用(2) 解决方案 首先在堆栈上创建一个 Money 对象,其生命周期在创建时的范围内。当您点击} 时,意味着超出范 ..
发布时间:2016-10-14 22:10:48 C/C++开发

一个库强制全局重载新的/删除对我!

我为一个大的封闭源代码应用程序维护一个插件(实现为dll)。这已经工作好多年。然而,随着最新更新到它的SDK,供应商重载全局运算符new和delete。这给我造成了很多麻烦。发生什么是我的插件分配一个字符串。我把这个字符串传递到一个静态链接的库,修改它(改变它的长度,从而重新分配它)。我的应用程序崩溃。 原因当然是字符串存在于供应商分配的自定义堆上。静态链接库不了解这个堆,并尝试在该内存上使 ..

什么是C ++中的动态内存分配?

我正在学习C ++中的动态内存分配,并提到关键字 new 和 new [] 。 据说允许用户在运行时指定内存分配的大小,不同于在源代码中声明一个固定大小的变量或数组。 我不明白这个概念。它是如何工作的? 解决方案 因此,如果你想要一个10个整数的数组,你会写: int arr [10]; 但如果你想做这样的事情会怎么样? cout ..

必须新的总是后跟删除?

我想我们都明白,当重新分配动态分配的指针时,为了防止内存泄漏,删除的必要性。但是,我很好奇,C ++在什么程度上授权使用delete?例如,采取以下程序 int main() { int * arr = new int [5]; return 0; } 虽然对于所有意图和目的,和OS将清理所有内存一旦它返回),但标准仍然需要 - 或推荐 - 删除[]在这种情况下 ..
发布时间:2016-10-14 20:29:14 C/C++开发

新/删除操作不匹配错误有多严重?

我在我们的代码库中发现了经典的新/删除不匹配错误,如下所示: char * foo = new char [ 10]; //做某事 delete foo; // instead of delete [] foo; 这有多严重?它是否会导致内存泄漏或错误?后果是什么。我们有一些内存问题,但这似乎不足以解释我们的所有症状(堆腐败等) 编辑:额外的问题为 ..
发布时间:2016-10-14 20:19:21 C/C++开发

C ++中的新运算符和java中的新运算符之间的差异

据我所知, new 运算符执行以下操作:(如果我错了,请更正我。) 分配内存,然后返回 分配的内存的第一个块的引用。 初始化对象(调用构造函数。) 同样,运算符 new [] 以类似的方式工作,除了它为数组中的每个元素。 任何人都可以告诉我这些操作符和C ++和Java中的不同: 在其生命周期方面。 如果他们无法分配内存会怎么样。 解决方案 在C ++中, ..
发布时间:2016-10-14 20:03:36 Java开发

如何删除通过placement new操作符构造的对象?

char * buf = new char [sizeof(T)]; new(buf)T; T * t =(T *)buf; // code ... //这里我应该破坏* t,因为它是模板的参数,可以是 //通过基本类型(例如int)实例化所以这样代码 / * t->〜T(); * / //不正确(可能是正确的?奇怪,但它适用于VS 2005的基本类型) //这个代码 ..
发布时间:2016-10-14 12:51:37 C/C++开发

捕获std :: bad_alloc的策略

所以我使用Qt很多与我的发展和爱。 Qt对象的通常设计模式是使用 new 分配它们。 几乎所有的例子由Qt设计器生成的代码)绝对不检查 std :: bad_alloc 异常。由于分配的对象(通常是窗口小部件等)很小,这几乎不是问题。毕竟,如果你不能分配20个字节,赔率是没有太多你可以做的来解决这个问题。 目前,我采取了一项政策在try / catch中包装“大”分配(一页或两个大小) ..
发布时间:2016-10-14 12:38:59 C/C++开发

如何控制第三方库代码中的内存分配策略?

上一个标题:“必须替换全局运算符new和delete以更改第三方代码中的内存分配策略吗?” > 我们需要替换第三方库中的内存分配技术,而不更改其源代码。 长故事: p> 考虑内存限制的应用程序,它可以进行大量的动态分配(也许,几乎所有可用的系统内存)。我们使用专门的分配器,并在任何地方使用它们( shared_ptr 的,容器等)。我们对我们的应用程序中分配的每个字节的内存拥有 ..
发布时间:2016-10-14 12:22:36 C/C++开发

何时为#include< new>库需要在C ++?

根据运营商新 的参考条目( http://www.cplusplus .com / reference / std / new / operator%20new / ): 全局动态存储运算符 在标准 库中是特殊的: 所有三个版本的operator new都在全局命名空间中声明, 第一个和第二个版本是在C ++程序的每个 翻译单元中隐式声明的: 头不需要是$ 这似乎 ..
发布时间:2016-10-14 12:07:06 C/C++开发

它是有用的测试“新”的返回。在C ++?

我通常不会在C ++中测试新的,我想知道为什么。 Foo * f = new Foo; // f假定为已分配,为什么通常没有人测试新的返回? / p> 解决方案 根据当前标准, new 从不返回 NULL 抛出一个std :: bad_alloc。如果你不想要新的(根据旧的标准),而是返回NULL,你应该调用它后缀用“(std :: nothrow)”。 即 Foo ..
发布时间:2016-10-14 11:48:02 C/C++开发

使用运算符new和运算符delete与自定义内存池/分配器

我正在处理内存池/内存分配器实现,我设置在一个庄园,只有一个特殊的“客户端”对象类型可以从池中绘制。客户端可以直接构建到池,或者它可以使用池用于动态内存调用,或者它可以在理论上同时使用。 我希望能够重载运算符新和运算符删除,这样就可以调用我的池“alloc()”和“free()函数,以便获得构建对象所需的内存。 我遇到的主要问题之一是让我的操作员删除,以便能够通过调用pool-> free ..

什么删除命令真正做内存,对于C ++中的指针?

可能重复: C ++删除 - 它删除我的对象,但我仍然可以访问数据? 局部变量的内存是否可以在其范围之外访问? 我不明白 delete 当我想要释放分配给 new 的内存时真的做到。在C ++ Premiere书中,它被写为: 这会删除ps指针指向的内存;它不会删除 指针本身。例如,您可以重复使用ps来指向另一个新分配。你 应该总是平衡使用新的和使用删除;否则,可以用 ..
发布时间:2016-10-14 10:37:45 C/C++开发

除了分配和ctor调用之外,C ++新操作符是什么?

new 操作符除了分配内存和调用构造函数之外,还有什么其他事情? 解决方案 C ++标准可以说明来自 header: 必需的行为: 返回一个非空指针,存储(3.7.3),否则抛出一个 bad_alloc异常。 默认行为: - 执行循环:在循环中,函数首先尝试分配所请求的存储。 尝试涉及调用标准C库函数malloc未指定。 - 如果尝试成功,返回 ..
发布时间:2016-10-14 10:36:36 C/C++开发

为什么不删除销毁任何东西?

我在玩一些内存动态分配,但我没有得到一点。当使用 new 语句分配一些内存时,我应该能够破坏指针指向的内存使用 delete 。 但是当我尝试,这个 delete 命令似乎不工作,因为空间的指针 让我们以这个真正基本的代码为例: #include using namespace std; int main() { //我创建一个指向整数 ..
发布时间:2016-10-14 10:24:42 C/C++开发