new-operator相关内容
我使用一个8核处理器,我使用Boost线程来运行一个大程序。 逻辑上,程序可以分成组,每个组由一个线程运行。 在每个组内,一些类总共调用“new”运算符10000次。 Rational Quantify显示,当程序运行时,“新”内存分配占用了最大处理时间,并且减慢了整个程序的运行速度。 方式我可以加快系统可以使用每个'组'内的线程,以便10000内存分配可以并行发生。 我不清楚如
..
当我们重载一个类的新运算符时,我们将该函数声明为一个成员函数。 例如: class OpNew { public: OpNew ;& “OpNew :: OpNew()”
..
我在我的函数中有一个变量是静态的,但是我想在每个线程的基础上是静态的。 如何分配内存我的C ++类,每个线程都有自己的类实例的副本? AnotherClass :: threadSpecificAction { //如何使用线程本地存储分配这个? static MyClass * instance = new MyClass(); instance-> doSometh
..
我知道我可以通过 new char [n] 创建一个 n chars的数组。即使 n 不是编译时常数,它也可以工作。 但是我想说的是, n chars: 我的第一次尝试如下: struct Test { std :: size_t size; char a []; }; 但是看起来 new Test [n] 不按我的期望,而是分配 n size
..
这个问题在面试中向我问过: 在C ++中, 如果我们使用 malloc 分配内存并使用 delete 内存? 如果我们使用 new 分配内存, c> 如果在代码中使用上述内容,我们会遇到什么问题? 我的答案是没有区别。 解决方案 如果你这样做,你会遇到未定义的行为。永远不要试试。虽然 new 可能通过 malloc()和 delete 可以通过 free()实现,
..
我刚刚学习了一个名为“placement new”的C ++结构。它允许您精确控制指针指向内存中的位置。它看起来像这样: #include
..
可能重复: (POD)释放内存:delete []等于删除? delete 是否可以解除数组中第一个元素之外的元素? char * s = new char [n]; delete s; 在上述情况下,看到 s 是连续分配的,并且不应该 delete 只有数组的一部分? 对于更复杂的类型, delete 调用超出第一个对象的析构函数?
..
我在我的程序中创建一个小的内存泄漏查找程序,但 我的方式重载新和删除(以及新的[]和删除[]) 似乎没有做任何事情。 void * operator new(unsigned int size,const char * filename,int line) { void * ptr = new void [size]; memleakfinder.AddTrack(ptr,si
..
可能重复: 不要调用 delete new 或 new []或 ] 在C ++程序中是一个未定义的行为或只是一个内存泄漏? 欢迎来自标准的参考(如果有)。 这是在
..
什么是正确的方法来删除这里分配的所有内存? const char * charString =“Hello,World” ; void * mem = :: operator new(sizeof(Buffer)+ strlen(charString)+ 1); Buffer * buf = new(mem)Buffer(strlen(charString)); delet
..
可能重复: $使用新对象和不使用实例化对象之间的区别是什么? b $ b 这可能是一个基本问题,可能已经被问过(例如,这里);但我还是不明白。 考虑下面的C ++类: class Obj { char * str; public: Obj(char * s){ str = s; cout
..
我刚刚开始进入C ++,我想学习一些好的习惯。如果我刚刚为 new 运算符分配了 int 类型的数组,那么如何将它们全部初始化为0循环通过他们自己?我应该使用 memset 吗?是否有“C ++” 解决方案 这是一个令人惊讶的C ++的一个鲜为人知的特性(证据表明,没有人给定这是一个答案),但它实际上具有特殊的语法默认初始化数组(好吧,技术上,它被称为“价值初始化”在标准): ne
..
为什么C ++没有直接对应于展示位置new的展示位置删除,即调用析构函数并调用适当的位置删除操作符? 例如: MyType * p = new(arena)MyType; ... //当前技术 p->〜MyType(); operator delete(p,arena); //提议的技术 delete(arena)p; 解决方案 c $ c
..
如何在C ++中 realloc ?它似乎缺少从语言 - 有新和删除但不是 resize ! 我需要它,因为我的程序读取更多的数据,我需要重新分配缓冲区来保存它。我不认为删除旧的指针和新新的,更大的,是正确的选择。 解决方案 使用:: std :: vector! Type * t =(Type *)malloc(sizeof(Type)* n) memset(t,0,si
..
为什么应该会替换默认操作符 new 和 delete $ b $ b 这是重载新的和删除的延续非常有趣的C ++常见问题: 操作员重载。 此常见问题的后续条目是: 新和 delete code>运算符? 注意:答案是基于Scott Meyers的“更有效的C ++” br> (注意:这意味着要输入 Stack Overflow的C ++常见问题 。如果您想批评在此表单
..
可能重复: 什么时候在C ++中使用new关键字? $ b b 我应该在C ++中使用“new”操作符?我来自C#/ Java背景和实例化对象对我很困惑。 如果我创建了一个简单的类“Point”,当我创建一个点应该: 点p1 = Point(0,0); 或 Point * p1 = new Point(0,0); 有人可以
..
我知道根据C ++标准,如果新的失败分配内存,它应该抛出std :: bad_alloc异常。但我听说有些编译器如VC6(或CRT实现?)不坚持它。这是真的 ?我问这是因为检查NULL后,每一个新的语句使代码看起来很丑陋。 解决方案 VC6在这方面默认不合规。 VC6的 new 返回 0 (或 NULL )。 p> 这是Microsoft的知识库文章以及他们建议的解决方法,使用自定义
..
在C ++中, 除了动态内存分配之外,以下两行代码之间存在功能差异: 时间t(12,0,0); // t是一个时间对象 时间* t = new Time(12,0,0); // t是指向动态分配的Time对象的指针 我假设已经定义了一个Time(int,int,int)ctor。我也意识到,在第二种情况下,t将需要被删除,因为它是在堆上分配。是否有其他差异?
..
一个简单的测试应用程式: cout 0x876c0b8 标准是什么说的? 解决方案 从5.3.4 / 7 当direct-new-declarator中的表达式的值为零时,调用分配函数来分配一个没有元素的数组。 从3.7.3.1/2
..
如何编写ISO C ++标准一致的自定义新和 delete 运算符? 这是重载新增和删除的延续照亮C ++常见问题解答,操作符重载及其后续操作 b 第1节:编写符合标准的新运算符 第1部分:了解编写自定义新运算子 第2部分:了解 new_handler 需求 第3部分:了解具体的场景需求 第2节:编写符合标准的 delete 运算符 / 7195226“>实施自
..