博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
new运算符与malloc函数(还需要修改)
阅读量:7153 次
发布时间:2019-06-29

本文共 884 字,大约阅读时间需要 2 分钟。

  new和malloc都是在对上开辟内存,但尽量使用new。

  使用malloc的注意事项:(1)程序猿必须实现确定对象的长度;(2)malloc返回一个void*指针,赋值给其他类型时,必须进行强转;(3)malloc可能申请内存失败,所以必须判断返回值来确保内存分配成功;(4)不会调用构造函数,但使用对象之前必须对它初始化;(5)和free配合使用。

  C++解决动态内存分配的方案是把对象所需要的操作都结合在一个称为new的运算符里,当new创建一个对象时,直接返回该类型的指针,它在堆里为对象分配内存并调用构造函数完成初始化,和delete配合使用。

1 Person *p = new Person; 2      3 //相当于4-8行代码 4 Person *p = (Person*)malloc(sizeof(Person)* 100); 5 if (NULL == p){ 6     return; 7 } 8 (*p).str = "abc"; 9 10 delete p;11 if (p != NULL){12     free(p);13     p = NULL;14 }

  注意事项:void*接收new出来的指针,会出现释放问题,不会调用析构函数

  new堆区开辟数组,一定会调用默认构造函数,所以一定要提供默认构造;栈区开辟数组,可以指定有参构造

1 Person *p = new Person("abc"); //表示调用有参构造初始化2 delete p;3 4 Person *p1 = new Person[10]; //堆上开辟数组,调用默认构造函数,必须提供默认构造(程序猿不能只提供有参构造,会覆盖)5 delete[] p1;6 7 Person p2[10] = { Person("123"), Person("456") };//栈上开辟内存,可以指定有参构造8 delete[] p2;

 

转载于:https://www.cnblogs.com/qinguoyi/p/10237267.html

你可能感兴趣的文章
浏览器对文字的解析
查看>>
Reuse Is About People and Education, Not Just Architecture
查看>>
【5.20 专辑】来聊聊程序猿的那些花式表白
查看>>
Damn Couples ZOJ - 3161
查看>>
Linux内存使用情况以及内存泄露情况
查看>>
QuickReport让安装的所有打印机同时打印(多台打印)
查看>>
解决一bug的流程复盘
查看>>
Codeforces Round #375 (Div. 2) - D
查看>>
if else 流程判断
查看>>
导航菜单点击图片切换--jquery
查看>>
自定义Web框架
查看>>
netty入门04
查看>>
本地计算机 上的 MySQL 服务启动后停止。某些服务在未由其他服务或程序使用时将自动停止。...
查看>>
调用系统拍照
查看>>
解方程
查看>>
Java——IO之常量及路径
查看>>
DKhadoop安装包下载与监控参数说明
查看>>
Linux-3.5-Exynos4412驱动分层分离
查看>>
Linux shell break、continue、exit、return的用法 及exit、return的区别
查看>>
手动实现 SpringMVC
查看>>