重复: 在什么情况下我use malloc vs新的吗?

只要重新阅读了这个问题:
之间的区别是什么"新的"和"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当你不要担心醒目的例外(或使用非扔版本的新)。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top