美文网首页
delete free

delete free

作者: hehehehe | 来源:发表于2020-10-19 12:42 被阅读0次
https://www.cnblogs.com/gatherstars/p/8179859.html
1. 数组的时候int *p=(int*)malloc(10*sizeof(int)) 释放的时候 free(p)即可;
这是因为编译器对malloc做了一些特殊的处理,以保证可以正确释放内存。
而当int *p=new int[10]释放的时候应为delete []p,注意[]的作用说明释放的是一个数组的内存,
如果delete p则只是释放的p[0],其余9个int的内存没有释放;这是因为当指明为[]的时候,
编译器实际上是做了一个循环来释放这个数组的所有内存。

2. 在类和对象的时候会有很大区别。在使用malloc和free来处理动态内存的时候,仅仅是释放了这个对象所占的内存,而不会调用这个对象的析构函数;使用new和delete就可以既释放对象的内存的同时,调用这个对象的析构函数。
https://www.cnblogs.com/wangpfcnblogs/p/4604311.html
一,new和delete:

(1)new是操作符,不是函数,malloc是函数。

(2)基本数据类型(int ,float,double,char),free, malloc, new,delete 效果一致。

(3)delete ,free对于基本数据类型,释放,释放两次都会出错。

(4)free之后,指针的值不会改变,delete之后,指针的值会改变(我的电脑上每次delete之后,指针的值变成了0000 8123),
而free之后的指针的值没有改变,打印出来的是垃圾值。free之后,为了避免迷途指针,
最好将指针设置为空指针(nullptr)。

(5)如果是基本数据类型 new 是不会调用构造函数,delete 时不会调用析构函数。

如果是结构类型,new会调用构造函数,delete会调用析构函数。

(6)基本数据类型 数组,delete,delete[]一致;基本数据类型,可以互相混合使用。

(7)复合数据类型(delete  ,delete[]不能混合使用)

例如:mydata *p(new mydata);   delete p;

mydata *p(new mydata[10]);    delete[] p;

(8)单个堆上的对象,不可以用delete [],反复delete,下面delet代码是错误,只用能delete p,不能用delete [] p.

mydata *p(new mydata);

delete [ ]  p;//单个堆上的对象,不可以用 delete [],用delete[]程序会报错
#include<iostream>
using namespace std;

void main2()
{
    int *p1 = new int(4);//指向一个变量
    int *p2 = new int[10]{ 1, 2, 3, 4, 5, 6, 7, 8, 9, 0 };//指向数组
    delete p1;//delete p1    int *p1 = new int(4);
    delete[] p2;//delete[] p2  int *p2 = new int[10]{ 1,2,3,4,5,6,7,8,9,0 };
    
    cin.get();
}

相关文章

  • delete free

  • 2018-05-09

    new delete new delete与malloc free的区别 对于基本数据类型 malloc与free...

  • C++面试(1)

    1.new、delete、malloc、free关系 delete会调用对象的析构函数,和new对应free只会释...

  • C++经典面试题(最全,面中率最高)

    1.new、delete、malloc、free关系 delete会调用对象的析构函数,和new对应free只会释...

  • c++相关面试题

    1、new、delete、malloc、free的关系delete与new对应会调用对象的析构函数,free只会释...

  • ARC下的内存释放

    free() delete 与 delete[] 释放内存delete 释放new分配的单个对象指针指向的内...

  • C++笔试整理

    1、new 、delete 、malloc 、free 的关系malloc 与 free 是 C++/C 语言的标...

  • 成员函数、继承(20170213)

    C++06 区分new/delete malloc/free new /delete 运算符,不需要转换,自动...

  • C++面试题——01

    1.new 、 delete 、 malloc 、 free 关系 delete 会调用对象的析构函数 , 和 n...

  • 面试准备

    C++面试总结 New、Delete和malloc、free的区别? New和Delete自动调用 构造函数 和 ...

网友评论

      本文标题:delete free

      本文链接:https://www.haomeiwen.com/subject/qsykmktx.html