“new”和“malloc”和“calloc”以及其他家庭有什么区别?
(何时)我需要除“新”以外的任何其他内容吗?
其中一个是否使用其他任何一个实现?
答案 0 :(得分:69)
new
和delete
是C ++特有的功能。它们不存在于C. malloc
是旧学校C的做事方式。大多数情况下,您不需要在C ++中使用它。
malloc
分配未初始化的内存。分配的内存必须与free
一起发布。calloc
与malloc
类似,但使用常量(0)初始化已分配的内存。需要使用free
。new
通过调用构造函数(如果它是一个对象)初始化分配的内存。分配有new
的内存应与delete
一起释放(后者又调用析构函数)。它不需要您手动指定所需的大小并将其强制转换为适当的类型。因此,它更现代,更不容易出错。答案 1 :(得分:20)
新/删除+新[] /删除[]:
malloc / free + family:
答案 2 :(得分:8)
正如其他帖子所指出的那样:malloc / free是C ++的一部分,与C兼容。
答案 3 :(得分:5)
使用new意味着将在新分配的内存上调用构造函数。如果正在分配的东西没有构造函数,则new在功能上与malloc相同。通常应该用于它。
new可能会或可能不会以malloc的形式实现 - C ++标准不需要任何一种方法。
答案 4 :(得分:5)
除了新内容之外,您不需要任何其他内容。它完全取代了C ++中的malloc。
至于区别:Malloc只是分配内存。新分配的内存并调用构造函数。同样免费只是释放内存。删除释放内存并调用析构函数。
警告:不要混淆两个成语。结果未定义。
答案 5 :(得分:1)
我可以回忆一下new和malloc之间的主要区别是你不能重新分配new使用realloc分配的内存。因此,如果您想增加/减少内存块的大小,则必须分配一个新块并复制所有内容。
Calloc允许您初始化您分配的内存块,而malloc则不会。
答案 6 :(得分:1)
当你 new 一个对象时,不仅会分配对象的空间,而且会调用对象的构造函数。但这是它完成的C ++方式, malloc 是分配内存的 C 中的旧版本方式。 calloc 与 malloc 相同,只是它将内存清除到所有位为零。