• 33)new和delete关键字


    ------------------------------------------------------------------------------------------------------------------------------------------------------

    (1)int *p=new  int(10);//就是在堆区申请一个int,然后赋值为10

    (2)int *p=new  int【10】; //申请一个数组  含有10个元素,p是这个数组的首地址

    (3)其实平时可以   int a(10);   //其实int也是一个类

    ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------

    (1)malloc和free的区别:malloc和free是标准库的函数 stdlib.h中的

    (2)new和delete是C++语言的操作符,是集成进去的,不用什么头文件,也不用压栈和出栈,这个就有了省时间

    (3)new构造一个对象时,会调用类的构造函数,但是  malloc却不会,必须手动去实例化类的成员变量

    (4)free在销毁对象时,不会调用析构,但是  delete会调用析构函数

    (5)

    --------------------------------------------------------------------------------------------------------------------------------------------

    1)new和delete,实际上和sizeof一样,是操作符,不是函数

    2)动态的分配和撤销内存空间,例如C的malloc和free是对堆内存的申请和释放,在C++中,用  new  和delete来进行

    3)但是,为了和C语言兼容,还是保留了 malloc和free

    4)看两段代码,实现一样的功能,但是不同的写法:

     1 //C语言写法
     2 void test1()
     3 {
     4     int *p=(int *)malloc(sizeof(int));
     5     *p=10;
     6     if(p!=NULL)
     7     {
     8         free(p);
     9         p=NULL;
    10     }
    11     
    12 }
    13 //C++写法
    14 void test2()
    15 {
    16     int *p=new int;
    17     *p=10;
    18     if(p!=NULL)
    19     {
    20         delete p;
    21     }
    22 }

    5)然后  开辟数组,用new和delete

     1 //C语言写法
     2 void test1()
     3 {
     4     int *p=(int *)malloc(sizeof(int));
     5     *p=10;
     6     if(p!=NULL)
     7     {
     8         free(p);
     9         p=NULL;
    10     }
    11     //如果开辟一个数组
    12     int *p=(int *)malloc(sizeof(int)*10);
    13     
    14     for(int i=1;i<=10;i++)
    15     {
    16         p[i]=i;
    17     }
    18 }
    19 //C++写法
    20 void test2()
    21 {
    22     int *p=new int;
    23     *p=10;
    24     if(p!=NULL)
    25     {
    26         delete p;
    27     }
    28 
    29     //开辟数组
    30     int *p=new int[10];
    31     for(int i=1;i<=10;i++)
    32     {
    33         p[i]=i;
    34     }
    35 }
  • 相关阅读:
    方差、协方差、相关系数的理解
    yii2原生sql
    Oracle中日期作为条件的查询
    IDEA 中tomcat图片储存和访问虚拟路径(图片和程序分家)
    nginx配置静态资源:配置绝对路径
    一般spring配置上下文
    spring boot 集成 redis lettuce(jedis)
    windows下面同时部署多个tomcat的方法
    oracel: 通过特殊表序列来实现oracle自增id (mybatis实现自增id)
    使用fastjson 进行jsonObject转实体类对象
  • 原文地址:https://www.cnblogs.com/xiaoyoucai/p/8184676.html
Copyright © 2020-2023  润新知