zoukankan      html  css  js  c++  java
  • C/C++ Basic the differs between [malloc&free] and [new &delete]

    1.basic concepts
        malloc&free  and new&delete are all used to request memory allocation and release memory allocated from heap area.
        eg.
        malloc.h must be referenced when using malloc&free
       i)
        int *array;
        array=(int *)malloc(4*sizeof(int));// declare an array which has four int elements
         ....
        free(array);//release the memory which is allocated to array.
      ii)
        int *array
        array=new int[4];
        ...
        delete[] array;
    all these two cases works the same. but what is their differs then? are they the same functioanlity? NO!

    2.diffs.
        we can only say that in some cases, they work the same.that is to say, we can use malloc&free to take place of new&delete. but this can not applied all the time.
        the main reason is :malloc will not invoke class construtor in C++, while new do. At the same time, free will not invoke destructor,while delete do.
        eg.
        class TDate
    {
        public:
           TDate()
            {
            month=1;
            day=1;
            year=1;
            printf("constructor is invoked");
            }
            ~TDate()
            {
            printf("destructor is invoked");
            }
        protected:
            int month;
            int day;
            int year;
    }

    case 1: use Malloc
            TDate *p;
            p=(TDate *)malloc(sizeof(TDate));//do not invoke constructor at all
            ...
            free(p);//do not invoke destructor at all
        in this case, the constructor of TDate will not be invoked. so all its memebers can not be initialized.

    case 2: use new
            TDate *p;
            p=new Tdate;//invoke constructor to initialize the instance
            ...
            delete p;//invoke destructor to release resource.

  • 相关阅读:
    bug案例 php 生成csv文件 下载打开文件 提示 文件格式与文件扩展名指定的格式不一致 提示 是SYLK 文件解决方法
    php 三元运算 ?: 和 ?? 认识
    mysql 索引知识
    算法 之 红黑平衡二叉树
    算法 计算机中树的分类 概念树
    mysql B+树
    算法 之 二叉树的前序 中序 后序遍历
    mysql B树分析
    mysql 坑位之 GROUP_CONCAT 函数使用
    HTTP请求:GET与POST方法的区别
  • 原文地址:https://www.cnblogs.com/Winston/p/1142392.html
Copyright © 2011-2022 走看看