当使用Malloc而不是新的[重复]
-
03-07-2019 - |
题
只要重新阅读了这个问题:
之间的区别是什么"新的"和"malloc"和"calloc"C++?
我检查的答案,但没有人回答了问题:
- 当我会使用malloc而不是新的吗?
有几个原因(我可以想到的两个)。
我们最好的浮动的顶端。
解决方案
一对夫妇想到:
- 当你需要代码的便携式之间C++和C。
- 当你被分配存在一个图书馆,可以从所谓的C,C代码,免费的分配。
其他提示
从Stroustrup常见问题上 new/malloc
我贴上主题:
只要你使用malloc()必须考虑的初始化和皈依的返回指针指向一个合适的类型。你也必须考虑如果你有了数字节的权利。没有绩效之间的差malloc()以及新当你采取初始化考虑在内。
这应该回答你的问题。
的最好理由我可以认为使用malloc在C++是当与一个纯粹C API。一些C Api我曾经使用过取得所有权的存的某些参数。因此,它们是负责释放的记忆,因此存储器必须能够自由,能够通过免费的。Malloc会的工作,为此puprose但不一定是新的。
C++,只是从来没有。新的通常是一个包装malloc调的构造(如果适用的。)
然而,至少有视觉C++2005年或者更好, 使用malloc可能实际上导致新的安全漏洞.
考虑这个代号:
MyStruct* p = new MyStruct[count];
MyStruct* p = (MyStruct*)malloc(count* sizeof(MyStruct));
他们看起来equivelent.然而,代码为第一个实际检查整数溢出 count * sizeof(MyStruct).
如果计数来自一个unstrusted源,它可能会导致整数溢出造成少量存在分配,但是当你用你超支的缓冲区。
每个人都有提及(使用稍微不同的话)时,使用C库,将会使用免费的()并有很多周围的人。
在其他情况下,我看到的是:
当知晓自己的存管理(因为对于一些原因,你已经发现了通过模型的默认是不够的).你可以分配存块与malloc和初始化的对象内的游泳池采用的安置新的。
一个原因是,在C++,你可以载的新的运营商。
如果你想可以肯定的是使用该系统的库存分配代码,可以使用malloc.
C++编程人员应该很少如果曾经需要调malloc.唯一的理由这样做,我认为将是一个不构成API望你通过在malloc会的存储器,因为它将是这样做的自由。在你自己的代码,新的应该总是平等的malloc.
如果记忆是能通过释放免费的()(你或者别人的代码),这是非常需要使用malloc.
否则我不知道。一个人为的情况是,当你不想析构(s)应在退出运行,但在这种情况下,你可能应该对象,一个没有-op dtor无论如何。
你可以使用malloc当你不要担心醒目的例外(或使用非扔版本的新)。