new-operator相关内容

在C ++中删除对象

这里是一个示例代码: void test() { Object1 * obj = new Object1(); 。 。 。 delete obj; } 我在Visual Studio中运行它, obj;'。 这不是正常的方式来释放与对象相关的内存吗? 我意识到它会自动调用析构函数...这是正常的吗? 这里是一个代码片段: ..
发布时间:2016-10-22 18:07:44 C/C++开发

如何防止全局覆盖的“新”操作符从外部库链接

在我们的iPhone XCode 3.2.1项目中,我们链接了两个外部静态C ++库libBlue.a和libGreen.a。 libBlue.a全局覆盖了“ ”运算符,用于自己的内存管理。然而,当我们构建我们的项目时,libGreen.a使用libBlue的 new 运算符,这导致崩溃(可能是因为libBlue.a正在做出关于分配的结构的种类的假设)。 libBlue.a和libGreen.a是 ..
发布时间:2016-10-22 17:59:24 移动开发

新的堆栈而不是堆(如alloca vs malloc)

有没有办法使用 new 关键字在堆栈上分配(ala alloca )而不是堆> > 解决方案 要在堆栈上分配,可以通过值声明您的对象为局部变量使用alloca获取一个指针,然后使用in-place new操作符: void * p = alloca(sizeof(Whatever) ); new(p)Whatever(constructorArguments);但是,使用 ..
发布时间:2016-10-22 17:56:10 C/C++开发

是否可以完全禁用默认的C ++ new运算符?

因为我们的应用程序具有硬性能和内存限制,我们的编码标准禁止使用默认堆—即,没有 malloc ,没有默认新。每个内存分配必须选择几个特定分配器之一;类似 //全局声明 void * operator new(size_t size,CustomAllocHeap * heap,const char * perpetrator_name ) { return heap-> Alloca ..
发布时间:2016-10-22 17:37:26 C/C++开发

C ++:新的调用,像calloc一样?

是否可以调用 new 让它清空内存,如 calloc ? 解决方案 与他们的答案中有些人说的相反,是可能的。 char * c = new char [N](); 将零初始化所有字符(实际上,它被称为值初始化,但值初始化将对标量类型数组的所有其成员进行零初始化)。如果这是你的后。 值得注意的是,它也适用于没有用户声明构造函数的类类型数组,在这种情况下,它 ..
发布时间:2016-10-22 17:22:33 C/C++开发

操作员删除签名意外行为

在他的书C ++编程语言(第4版)中,stroustroup提到全局运算符new& delete可以通过编写具有以下签名的全局函数来重载: void * operator new(size_t); // use for individual object void * operator new [](size_t); // use for array void operator d ..
发布时间:2016-10-20 22:57:42 C/C++开发

nothrow或异常?

我是一个学生,我有关于C ++的小知识,我试图扩大。这更像是一个哲学问题。我不是想实现某些东西。 自 #include // ... T * t = new(std :: nothrow)T(); if(t) { // ... } // ... 将隐藏异常,因为与简单的 if(t)相比,处理异常更重不是正常的新的T()不是不太好的做 ..

关于C ++中的自定义对象的构造函数/析构函数和新的/删除操作符

假设我有一个我自己创建的链接列表。它有自己的析构函数,释放内存。此链接列表不会重载新的或删除。 现在,我试图创建一个所述链表的数组(打开散列,如果我理解正确)。然后我在这个打开哈希类的构造函数中分配必要的内存。在构造函数内部调用的新操作符足以正确分配数组的内存,对吗?我不确定,因为我没有重载的新的Linked List类。 此外,假设我的链表的数组被称为元素,我可以写“删除[]元素“在 ..
发布时间:2016-10-20 22:11:01 C/C++开发

delete []提供了一个修改的newed指针。未定义行为?

在同行代码审查期间,我看到了一些代码如下: char * s = new char [3 ]; * s ++ ='a'; * s ++ ='b'; * s ++ ='\0'; delete [] s; //这可能或可能不会崩溃在某些或任何一天! 首先,我知道在标准C ++中,指向一个数组大小。虽然访问它导致未定义的行为。所以我相信最后一行 * s ++ = ..

是指针保证是>一定值?

在C ++当我做新(或甚至malloc)是否有任何保证返回地址将大于某个值?因为...在这个项目中,我发现它非常有用,使用0-1k作为枚举。但我不想这样做,如果它可能得到一个低的价值。我唯一的目标系统是32或64位的CPU与操作系统的窗口/ linux和mac。 标准是否说关于指针? Windows或linux是否说明了它们的C运行时和最低的内存地址(对于ram)是什么? -edit- ..
发布时间:2016-10-20 21:33:57 C/C++开发

size_t参数new运算符

我有一点在我心中,我不能弄清楚新的操作符重载。 假设我有一个类MyClass,但MyClass.h MyClass.cpp和main.cpp文件是类似的; // MyClass.h class MyClass { public: //一些成员函数 void * operator new(size_t size); void operator delete(void * ..
发布时间:2016-10-20 09:32:27 C/C++开发

覆盖“新”和记录有关调用者的数据

我试图写一个内存分析器,迄今为止已经能够得到我的自定义函数工作malloc,自由,新的和删除。 我尝试使用 __ FILE __ 和 __ LINE __ 在重载的新方法中记录创建者, )它只是给出了重载函数的位置的细节。 有一种方法可以获得发件人的详细信息到重载的函数,而不对被测试的组件的现有代码做任何更改(如#define for malloc)? 我使用的函数是: void ..
发布时间:2016-10-19 20:46:13 C/C++开发

Callling对象构造函数/析构函数与自定义分配器

我一直在寻找自定义分配器,我经常看到他们使用某种函数来分配内存。为了测试目的和进一步教育我的自我,我试图做一个“简单”的例子这样做。然而,我有一个基本的事情我明白如何做。在 malloc vs new 中的一个关键区别是,使用new调用了构造函数。如果我想写我自己的分配器基本上替换 new ,当使用 malloc 我理解在类上我可以重载 new 和 delete ,所以我想问题的一大部分是, ..
发布时间:2016-10-17 11:13:42 C/C++开发

什么是“new int(100)”,做?

可能重复: 是一个变量或函数 使用类似: int * arr = new int(100); 它通过编译,但我知道这是错误的。应为 int * arr = new int [100] 当我编写错误的时候,编译器认为是什么? 解决方案 第一行分配单个 int ,并将其初始化为 100 。将 int(100)视为构造函数调用。 ..
发布时间:2016-10-14 23:25:39 C/C++开发

malloc&展示位置新对比

我在过去几天一直在研究这个问题,到目前为止,除了教条主义的论证或对传统的诉求之外,我还没有真正发现任何令人信服的东西(即“这是C ++的方式”))。 如果我创建一个对象数组,使用的令人信服的原因是什么(除了ease): #define MY_ARRAY_SIZE 10 // ... my_object * my_array = new my_object [MY_AR ..
发布时间:2016-10-14 23:08:44 C/C++开发