c++ delete 和 free的区别?
天蓬老师
天蓬老师 2017-04-17 13:24:10
0
9
711

链表节点移除

    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把后面的节点一起释放掉了?

天蓬老师
天蓬老师

欢迎选择我的课程,让我们一起见证您的进步~~

全員に返信(9)
小葫芦

好的习惯是成对使用

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

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

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

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

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

いいねを押す +0
黄舟

其实应该是这样的
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
PHPzhong

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

いいねを押す +0
洪涛

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

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

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

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

いいねを押す +0
Peter_Zhu

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

いいねを押す +0
巴扎黑

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

いいねを押す +0
Ty80

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

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

いいねを押す +0
大家讲道理

new delete這一對是對象
free malloc這一對是內存

いいねを押す +0
迷茫

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

いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート