有了malloc为什么还要new
malloc和new都是用于在程序中分配动态内存的方法,但它们在使用方式和行为上有一些差异。
语法差异:malloc是C语言中的库函数,而new是C++关键字。
malloc的语法是void* malloc(size_t size)
,返回一个指向分配内存的指针。需要将返回的指针进行显式的类型转换,来匹配所需的类型。
new的语法是new Type
,其中Type是要分配内存的类型。new会自动根据所需类型分配内存,并返回所需类型的指针。不需要显式进行类型转换。
构造函数调用:new还可以调用对象的构造函数初始化所分配的内存空间。这对于使用C++的类非常方便。而malloc只是分配了一块内存,不会调用对象的构造函数。
内存足够性检查:malloc在分配内存时不会检查内存是否足够,可能导致内存分配失败或者访问越界。而new在分配内存时会检查内存是否足够,如果内存不足会抛出std::bad_alloc异常。
内存释放:使用malloc分配的内存需要使用free函数进行释放,而使用new分配的内存需要使用delete运算符进行释放。这是因为malloc和free是C语言中的函数,而new和delete是C++的运算符。
综上所述,虽然malloc在C++中仍然可用,但通常推荐使用new来进行动态内存分配,因为它更加方便、类型安全,并且可以自动调用构造函数进行对象初始化。
相关推荐HOT
更多>>pycharm发生了ide错误是怎么回事
当PyCharm发生IDE错误时,这意味着在使用PyCharm集成开发环境时出现了问题。以下是一些可能导致PyCharm IDE错误的常见原因和解决方法:插件冲突...详情>>
2023-11-17 20:27:30ubuntu虚拟机怎么和windows互传文件
ubuntu虚拟机怎么和windows互传文件?我们可以使用以下方法在Ubuntu虚拟机和Windows之间传输文件:共享文件夹:在虚拟化软件(如VirtualBox或VMw...详情>>
2023-11-17 18:07:09MATLAB中的step怎么调
在MATLAB中,step函数用于绘制线性时不变(LTI)系统的阶跃响应。调整step函数的参数可以改变绘图的外观和行为。step函数的语法如下:step(sys)...详情>>
2023-11-17 12:53:14body元素有哪些属性
元素是 HTML 文档的主体部分,用于包含页面的实际内容。它本身并没有很多属性可供设置,但可以使用一些常见的属性来控制 元素的行为和样式,...详情>>
2023-11-17 12:28:44热门推荐
如何查看redis是否启动
沸pycharm发生了ide错误是怎么回事
热idea配置类注释模板不生效怎么解决
热python如何读取bin文件
新PyCharm怎么分段运行代码
有了malloc为什么还要new
ubuntu虚拟机怎么和windows互传文件
pom.xml文件怎么配置
VMware虚拟机指定的文件不是虚拟磁盘是什么意思
POI如何设置边框 POI设置边框的详细步骤介绍
ubuntu删除文件夹但重新创建文件夹了怎么恢复
php中echo和print的区别是什么
阿里云学生机选择轻量还是ECS
vps远程桌面服务器是什么意思