new
“ ” 和 “ malloc
” 和 “ ” 和家庭中的其他人有什么区别calloc
?
(什么时候)我需要“ new
”以外的东西吗?
其中一个是使用其他实现的吗?
new
“ ” 和 “ malloc
” 和 “ ” 和家庭中的其他人有什么区别calloc
?
(什么时候)我需要“ new
”以外的东西吗?
其中一个是使用其他实现的吗?
new
并且delete
是 C++ 特定的功能。它们在 C 中不存在。malloc
是老式的 C 做事方式。大多数时候,您不需要在 C++ 中使用它。
malloc
分配未初始化的内存。分配的内存必须用free
.calloc
类似malloc
,但使用常量 (0) 初始化分配的内存。它需要用free
.new
通过调用构造函数初始化分配的内存(如果它是一个对象)。分配的内存new
应该被释放delete
(这反过来又调用析构函数)。它不需要您手动指定所需的大小并将其转换为适当的类型。因此,它更现代,更不容易出错。new
/ delete
+ new[]
/ delete[]
:
new
/delete
是从堆中分配内存和释放内存的 C++ 方式。new[]
并且delete[]
是分配连续内存数组的 C++ 方法。malloc
realloc
方式使用,但可以使用placement new来重新使用相同的数据缓冲区new
和释放数据free
,也不能用delete[]
malloc
/ free
+ 家庭:
malloc
// free
family是从堆中分配和释放内存的C方式。calloc
同malloc
但也初始化内存malloc
用 delete 或 delete[] 分配和释放也可以在这里查看我的相关答案
new
分配和调用 ctor(未指定顺序)、delete
dtor 并释放调用 new 分配的内存malloc
只分配一些内存,并free
删除分配的内存malloc
new
可以使用malloc
(尽管标准不要求)实现calloc
与新分配的内存做同样的事情malloc
并且零初始化正如其他帖子所指出的那样:malloc
/free
是 C++ 的一部分,与 C 兼容。
除了新的,你不需要任何东西。它是 C++ 中 malloc 的完全替代品。
至于区别: malloc 只是分配内存。新分配的内存并调用构造函数。同样 free 只是释放内存。删除释放内存并调用析构函数。
一句警告:不要混淆这两个成语。结果未定义。
使用 new 意味着将在新分配的内存上调用构造函数。如果被分配的东西没有构造函数,那么 new 在功能上与 malloc 相同。并且通常应该优先使用它。
new 可能会或可能不会根据 malloc 实现 - C++ 标准不需要任何一种方法。
我记得 new 和 malloc 之间的主要区别是您不能使用 realloc 重新分配 new 分配的内存。因此,如果您想增加/减少内存块的大小,则必须分配一个新块并将所有内容复制过来。
Calloc 允许您初始化分配的内存块,而 malloc 不允许。
当您新建一个对象时,不仅为该对象分配空间,而且还调用该对象的构造函数。但这是 C++ 完成的方式,malloc是C中分配内存的旧版本方式。calloc与malloc相同,只是它将内存清除为所有位为零。