首页  >  问答  >  正文

c++ delete 和 free的区别?

链表节点移除

    if (head->next) {
        while (workptr->next && (workptr->next->index != index)) {
            workptr = workptr->next;
        }

        if (workptr->next) {
            tempptr = workptr->next;
            workptr->next = tempptr->next;
            free(tempptr); //这里用delete就会出错
            tempptr = nullptr;
            --this->size;
        }
    }

貌似delete把后面的节点一起释放掉了?

天蓬老师天蓬老师2765 天前683

全部回复(9)我来回复

  • 高洛峰

    高洛峰2017-04-17 13:26:10

    好的习惯是成对使用

    ps: 为什么我不很清楚,兄弟不要作死,先遵循这条信条,在慢慢搞明白原因

    new     <-->  delete
    new[]   <-->  delete[]
    malloc  <-->  free

    C++中的new/delete是新实现的内存分配器,而malloc和free是C标准库实现的另一套内存分配器,他们走的是不同的算法,所以当然不能混用了.

    至于一些奇葩的C++编译器实现,可能用C标准库中的free和malloc来实现new/delete,那我们还是不能确定能不能混用,如果你用了好使,也别混用

    总之他们就是两个不同的事物,你问张三借了钱,不能去李四哪里还啊

    回复
    0
  • 黄舟

    黄舟2017-04-17 13:26:10

    其实应该是这样的
    1) delete是关键字,而free是库函数,
    C++关键字
    http://baike.baidu.com/link?url=TJ8RZ7ac_liACKZkHnQt0LOWCtQS9Lxj6vnXKlycyrqZmGEpIaP9H0rO_2hbwxpYUw2G_ZjUShwPi742hShgAq
    C的关键字是http://www.cnblogs.com/yezhenhan/archive/2011/10/16/2214420.html
    注意,在C的关键字列表里没有free
    2) 操作的对象不同, delete的操作对象是对象或者对象数组,而free是void *
    3) C++的delete可以重载,也就数说,delete是对象方法,而一般没人重载free

    回复
    0
  • PHPz

    PHPz2017-04-17 13:26:10

    话说 delete与new 是一一对应的,tempptr是用什么方式申请的内存的啊?malloc吗?如果没有用new申请 自然不能用delete释放。

    回复
    0
  • PHP中文网

    PHP中文网2017-04-17 13:26:10

    貌似delete把后面的节点一起释放掉了?

    肯定不可能啊,这是链表,空间不连续,不可能会把后面的节点释放掉

    delete是运算符,如果指针指向的是对象,编译器在编译的时候除了产生释放空间的指令以外,还会调用该对象的析构函数

    所以,,会不会是析构函数的问题?

    回复
    0
  • 天蓬老师

    天蓬老师2017-04-17 13:26:10

    delete是会调用析构函数 再释放内存的,new和delete不一定强制成对 你可以malloc分配内存然后用placement new 在申请的内存上构造对象,让后也可以用delete删除他

    回复
    0
  • 巴扎黑

    巴扎黑2017-04-17 13:26:10

    看你使用的什么申请的空间啊,new的话用delete,malloc的用free,而且实际上malloc/free是c语言的用法,c++只是兼容。

    回复
    0
  • PHP中文网

    PHP中文网2017-04-17 13:26:10

    delete会在释放之前调用析构。

    对于POD来说,这两个函数行为相同,但是还是不提倡混着用。

    回复
    0
  • 大家讲道理

    大家讲道理2017-04-17 13:26:10

    new delete这一对是对象
    free malloc这一对是内存

    回复
    0
  • 迷茫

    迷茫2017-04-17 13:26:10

    http://stackoverflow.com/questions/240212/what-is-the-difference- Between-new-delete-and-malloc-free

    回复
    0
  • 取消回复