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

细说new与malloc的10点区别

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

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

  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