zoukankan      html  css  js  c++  java
  • 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 }
  • 相关阅读:
    Stm32CubeMX5 配置 STM32的串口DMA接受方式 --- 基于 stm32f051k8u6
    Stm32 控制1.44寸液晶显示图片 基于stm32f051k8u6
    makefile自动编译
    Stm32CubeMX5 创建LED控制工程
    ARM 汇编与C之间 的调用
    shell 脚本文件类型.sh ,变量
    bzoj3589 动态树 求链并 容斥
    bzoj2287【POJ Challenge】消失之物 缺一01背包
    bzoj2916: [Poi1997]Monochromatic Triangles 思路
    [NOI2010]超级钢琴 主席树
  • 原文地址:https://www.cnblogs.com/xiaoyoucai/p/8184676.html
Copyright © 2011-2022 走看看