zoukankan      html  css  js  c++  java
  • C++的new运算符和delete运算符

    动态分配一个int变量的内存,并用指针指向它,利用指针去给变量赋值:

    c语言的写法:
                          int* p1=(int*)malloc(sizeof(int));
                          *p1=10;

    c++的写法:     int* p2=new int(10); //注意,是()

    动态分配一个int[10]数组的内存,并用指针指向它,利用指针去修改数组中第一个元素的值,然后释放这块内存:

    c语言写法:
                          int* p3=(int*)malloc(sizeof(int)*10);
                          p3[0]=10;//*(p3+i)=p3[i]
                          free(p3);

    c++的写法:
                          int* p4=new int[10]; //注意,是[]
                          p4[0]=10;
                          delete [] p4;

    动态分配一个类对象:

    class Teacher

    {

    public:

             Teacher(int a){age=a;cout<<"调用构造函数"<<endl;}

             ~Teacher(cout<<"调用析构函数"<<endl;);

    private:

             int age;

    }

    c语言的写法:

                           Teacher *pt1=(Teacher*)malloc(sizeof(Teacher));

                            free(pt1);

    c++的写法:

                           Teacher *pt2=new Teacher(30);

                           delete pt2;

    在动态分配类对象时,malloc,free和new delete的区别:

    1.malloc只能分配内存,不能调用类的构造函数,free只能释放内存,不能调用类的析构函数。而new能分配内存,还能调用类的构造函数,delete能释放内存,还能调用类的析构函数。所以,malloc不能初始化类的对象,而new可以初始化类的对象;

    2.c++里面malloc和delete,new和free可以混用;

    3.malloc和free是c语言的函数,而new和delete是c++的操作符;

  • 相关阅读:
    生成函数解决多重集合的计数问题
    kmp板子
    poj1001
    【题解】洛谷P1315 [NOIP2011TG] 观光公交(前缀和+贪心)
    【题解】洛谷P1941 [NOIP2014TG] 飞扬的小鸟(背包DP)
    【题解】洛谷P2679 [NOIP2015TG] 子串(DP+滚动数组)
    【题解】洛谷P1514 [NOIP2010TG] 引水入城(DFS+DP)
    【题解】洛谷P1052 [NOIP2005TG] 过河(DP+离散化)
    [arc063F]Snuke's Coloring 2-[线段树+观察]
    [agc001E]BBQ Hard[组合数性质+dp]
  • 原文地址:https://www.cnblogs.com/jswu-ustc/p/8337654.html
Copyright © 2011-2022 走看看