本节内容 在堆中创建对象 视频提供:昆山爱达人信息技术有限公司 官网地址:www.bcdaren.com 联系QQ:1250121864 QQ交流群 :49759272 联系电话:0512-57882866
1、我们可以在什么地方创建对象? 昆山爱达人信息技术有限公司 www.bcdaren.com QQ:1250121864 <1> 全局变量区 Person p; <2> 栈 void Max() { } <3> 堆:new delete 在堆中创建对象: Person* p = new Person(1,2); 释放对象占用的内存: delete p;
2、在堆中创建对象:new delete 昆山爱达人信息技术有限公司 www.bcdaren.com QQ:1250121864 class Person { private: int x; int y; public: Person() printf("Person()执行了 \n"); } Person(int x,int y) printf("Person(int x,int y)执行了 \n"); this->x = x; this->y = y; ~Person() printf("~Person()执行了 \n"); };
3、new delete的本质: 昆山爱达人信息技术有限公司 www.bcdaren.com QQ:1250121864 <1> 分析malloc函数的执行流程: char* p= (char*)malloc(128); <2> 分析new的执行流程: Person* p = new Person(); _nh_malloc _nh_malloc_dbg _heap_alloc_dbg _heap_alloc_base HeapAlloc 总结: new = malloc + 构造函数 课后练习: 分析delete的执行流程
4、new[]/delete[] 昆山爱达人信息技术有限公司 www.bcdaren.com QQ:1250121864 1、分别用C和C++的方式在堆中申请int数组: int* p = (int*)malloc(sizeof(int)*10); free(p); int* p = new int[10]; delete[] p; 2、分别用C和C++的方式在堆栈申请Class类型数组: int* p = (Person*)malloc(sizeof(Person)*10); free(p); Person* p = new Person[10]; delete[] p; delete与delete[]有什么区别?
<汇编、C/C++线上班>学员可见 昆山爱达人信息技术有限公司 www.bcdaren.com QQ:1250121864 课后练习: <汇编、C/C++线上班>学员可见