new运算符与malloc函数(还须要修改)

细说new与malloc的10点区别html

C++ 自由存储区是否等价于堆?数组

浅谈new/delete和malloc/free的用法与区别函数

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

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

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

 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出来的指针,会出现释放问题,不会调用析构函数htm

  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;
相关文章
相关标签/搜索