new-operator相关内容
这里是一个示例代码: void test() { Object1 * obj = new Object1(); 。 。 。 delete obj; } 我在Visual Studio中运行它, obj;'。 这不是正常的方式来释放与对象相关的内存吗? 我意识到它会自动调用析构函数...这是正常的吗? 这里是一个代码片段:
..
在我们的iPhone XCode 3.2.1项目中,我们链接了两个外部静态C ++库libBlue.a和libGreen.a。 libBlue.a全局覆盖了“ ”运算符,用于自己的内存管理。然而,当我们构建我们的项目时,libGreen.a使用libBlue的 new 运算符,这导致崩溃(可能是因为libBlue.a正在做出关于分配的结构的种类的假设)。 libBlue.a和libGreen.a是
..
有没有办法使用 new 关键字在堆栈上分配(ala alloca )而不是堆> > 解决方案 要在堆栈上分配,可以通过值声明您的对象为局部变量使用alloca获取一个指针,然后使用in-place new操作符: void * p = alloca(sizeof(Whatever) ); new(p)Whatever(constructorArguments);但是,使用
..
因为我们的应用程序具有硬性能和内存限制,我们的编码标准禁止使用默认堆—即,没有 malloc ,没有默认新。每个内存分配必须选择几个特定分配器之一;类似 //全局声明 void * operator new(size_t size,CustomAllocHeap * heap,const char * perpetrator_name ) { return heap-> Alloca
..
是否可以调用 new 让它清空内存,如 calloc ? 解决方案 与他们的答案中有些人说的相反,是可能的。 char * c = new char [N](); 将零初始化所有字符(实际上,它被称为值初始化,但值初始化将对标量类型数组的所有其成员进行零初始化)。如果这是你的后。 值得注意的是,它也适用于没有用户声明构造函数的类类型数组,在这种情况下,它
..
在他的书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
..
我是一个学生,我有关于C ++的小知识,我试图扩大。这更像是一个哲学问题。我不是想实现某些东西。 自 #include // ... T * t = new(std :: nothrow)T(); if(t) { // ... } // ... 将隐藏异常,因为与简单的 if(t)相比,处理异常更重不是正常的新的T()不是不太好的做
..
假设我有一个我自己创建的链接列表。它有自己的析构函数,释放内存。此链接列表不会重载新的或删除。 现在,我试图创建一个所述链表的数组(打开散列,如果我理解正确)。然后我在这个打开哈希类的构造函数中分配必要的内存。在构造函数内部调用的新操作符足以正确分配数组的内存,对吗?我不确定,因为我没有重载的新的Linked List类。 此外,假设我的链表的数组被称为元素,我可以写“删除[]元素“在
..
在同行代码审查期间,我看到了一些代码如下: 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-
..
我有一点在我心中,我不能弄清楚新的操作符重载。 假设我有一个类MyClass,但MyClass.h MyClass.cpp和main.cpp文件是类似的; // MyClass.h class MyClass { public: //一些成员函数 void * operator new(size_t size); void operator delete(void *
..
我有这个C ++代码: #include using namespace std; struct MyItem { int value; MyItem * nextItem; }; int main(){ MyItem item = new MyItem; return 0; } 我得到错误: 错误:从`M
..
我试图写一个内存分析器,迄今为止已经能够得到我的自定义函数工作malloc,自由,新的和删除。 我尝试使用 __ FILE __ 和 __ LINE __ 在重载的新方法中记录创建者, )它只是给出了重载函数的位置的细节。 有一种方法可以获得发件人的详细信息到重载的函数,而不对被测试的组件的现有代码做任何更改(如#define for malloc)? 我使用的函数是: void
..
所以在C ++中你可以使用new关键字或其他实例化对象... Object o = new Object ; 但您也可以执行 Object o = Object(); 两者之间的区别是什么,为什么要使用一个呢? 解决方案 你不能做 Object o = new Object(); new 运算符返回一个指向类型的指针。它必须是 O
..
我一直在寻找自定义分配器,我经常看到他们使用某种函数来分配内存。为了测试目的和进一步教育我的自我,我试图做一个“简单”的例子这样做。然而,我有一个基本的事情我明白如何做。在 malloc vs new 中的一个关键区别是,使用new调用了构造函数。如果我想写我自己的分配器基本上替换 new ,当使用 malloc 我理解在类上我可以重载 new 和 delete ,所以我想问题的一大部分是,
..
我遇到了一些令我恐惧的代码。 基本上遵循以下模式: class Foo { public: //默认构造函数 Foo():x(0),ptr(nullptr) { // do nothing } 更有趣的构造函数 Foo(FooInitialiser& init):x(0),ptr(nullptr) { x = init.getX ptr = new int;
..
我在网站找到此代码 #include using namespace std; struct Base { Base(){cout
..
我在看新操作符的签名。这是: void * operator new(std :: size_t size)throw(std :: bad_alloc); 但是当我们使用这个操作符时,我们从不使用转换。即 int * arr = new int;因此,C ++如何转换类型为 void * c $ c>到 int * 。因为,即使 malloc 也会返回
..
可能重复: 是一个变量或函数 使用类似: int * arr = new int(100); 它通过编译,但我知道这是错误的。应为 int * arr = new int [100] 当我编写错误的时候,编译器认为是什么? 解决方案 第一行分配单个 int ,并将其初始化为 100 。将 int(100)视为构造函数调用。
..
我在过去几天一直在研究这个问题,到目前为止,除了教条主义的论证或对传统的诉求之外,我还没有真正发现任何令人信服的东西(即“这是C ++的方式”))。 如果我创建一个对象数组,使用的令人信服的原因是什么(除了ease): #define MY_ARRAY_SIZE 10 // ... my_object * my_array = new my_object [MY_AR
..