首页 > 编程知识 正文

malloc怎么声明,new和malloc的作用是一样的

时间:2023-05-03 13:19:17 阅读:146329 作者:4044

一个是c语言的关键字,另一个是c的关键字。

malloc需要分配一个内存,指定内存大小,并返回分配的内存指针。

news是运算符,重新加载并恢复正常的也是指针。

但是,这两者的指针返回的类型不同。 malloc返回无类型指针,需要转换。 new返回其自身带有类型的指针。 其语法的意思是,在new上附加类型的构造函数,进行连接和解读。 也就是说,new运算符首先去查找内存,或者接收内存地址,然后构造函数初始化该内存。 对此,malloc表示

因此,new运算符缺省情况下应该调用malloc,new运算符是为支持面向对象开发而设计的运算符。

因此,new与构造函数成对出现,其逆操作为delete,delete与构造函数一起出现,malloc为free。

当然,他们分配内存的位置,正如我们所说,因为new的下层通常调用malloc,所以他们的内存分配位置位于动态内存空间,也就是堆空间。 所谓的new相关自由内存区域的范围概念比堆内存大,这一点尚不为人所知。 但是,使用new关键字的操作的所有内存区域都是自由内存区域。

new关键字也可以在不分配内存的情况下传递地址。 stl编程显示了相关语法,就像construct方法一样。 这意味着只需根据原始地址初始化内存空间,无需再次分配。 这在stl容器中是非常常见的。

在异常处理中,malloc在内存分配失败时返回null,因此检测分配是否成功也与知道指针为null、判断new关键字失败时是否抛出异常相同,即new

try{ int *a=new int (; ) catch(bad_alloc )……) c的异常系统和Java的异常系统还不相似,但关于有无异常继承系统[参考1],这一点尚不清楚。

在复合数据结构上,例如排列、malloc的处理方法,给整体分配一个存储器,那时统一释放。 也就是说,调用malloc得到的这个指针保持所分配的存储器的大小,在free时,自然地释放该分配时的大小。 new关键字是数组的特殊语法,用于指定分配的元素数,new根据类型自动计算分配的内存大小,因此调用程序在使用new运算符时必须指定元素数。

int arr[3]=new int[3]; 而且new作为运算符,可以重载.这只是见过,没用过. c语言没有重载的概念.

new的重载如下

//这些版本可能会抛出异常的void *操作器新(size _ t )。 void *操作器new [ ]; Void *操作器删除(Void * )否执行; void *操作器delete [ (void *0) noexcept; //这些版本是异常的void*operatornew(size_t,nothrow_t ) noexcept; void *操作器new [ (size _ t,nothrow_t ) ]; void *操作器删除(void *,nothrow_t ) noexcept; void *操作器delete [ (void * 0,nothrow_t ) noexcept; 还有其他版本。 禁止重载。

不能重新定义void*操作器new (size _ t,void* ) /此版本的名为操作器new的操作器new。 不分配任何内存。 只需要返回指针参数。 然后,右边的new表达式负责用place_address指定的地址初始化对象

关于二次分配内存问题,malloc有兄弟姐妹。 realloc会判断该内存的后续顺序是否空闲,并当场扩大内存。 new屏蔽了内存分配的详细情况。 也就是说,不能提及二次分配。

最后添加的是new关键字有钩子函数,new_handler,应用和new失败后应该怎么做的步骤。 (这也鲜为人知)

[1] C借鉴异常分配机制

3358 www.cn blogs.com/qg-whz/p/5136883.htmlc

[2]new和malloc的区别

3359 www.cn blogs.com/qg-whz/p/5140930.html

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。