游戏开发论坛

 找回密码
 立即注册
搜索
查看: 3161|回复: 6

malloc,free和new,delete有什么区别?

[复制链接]

32

主题

108

帖子

108

积分

注册会员

Rank: 2

积分
108
发表于 2007-9-5 08:41:00 | 显示全部楼层 |阅读模式
请大家说说malloc,free和new,delete有什么区别?

32

主题

1259

帖子

1351

积分

金牌会员

Rank: 6Rank: 6

积分
1351
发表于 2007-9-5 09:11:00 | 显示全部楼层

Re:malloc,free和new,delete有什么区别?

malloc,free 不会调用构造和析构

8

主题

390

帖子

390

积分

中级会员

Rank: 3Rank: 3

积分
390
发表于 2007-9-5 10:39:00 | 显示全部楼层

Re:malloc,free和new,delete有什么区别?

Win32下每个进程2gb用户内存空间,怎么调用都一样,最后都是调VirtualAlloc,VirtualFree 。

103

主题

1432

帖子

1458

积分

金牌会员

Rank: 6Rank: 6

积分
1458
QQ
发表于 2007-9-5 11:20:00 | 显示全部楼层

Re:malloc,free和new,delete有什么区别?


new ,delete是c++对malloc,free的扩展。基本可以这样理解:
new 相当于:
T *ptr = (T) malloc( sizeof(T) ); //申请没有初始化的内存
ptr->T::T(); //调用构造函数初始化这块内存

delete 相当于:
ptr->T::~T(); //调用析构函数
free(ptr);//释放这块内存

还有,不能混用,即使你知道他们的原理差别,但是也不表示new 是通过malloc来实现的,所以不能用显式调用析构函数,在用free来代替delete。


33

主题

669

帖子

669

积分

高级会员

Rank: 4

积分
669
QQ
发表于 2007-9-7 16:15:00 | 显示全部楼层

Re:malloc,free和new,delete有什么区别?

呵呵,守法就好了

18

主题

82

帖子

86

积分

注册会员

Rank: 2

积分
86
发表于 2007-9-9 17:39:00 | 显示全部楼层

Re:malloc,free和new,delete有什么区别?

当然有了,malloc,free是c中的函数,而new 和 delete 是c++中函数, malloc来的内存是没有初始的 ,而new来的内存是经过调用构造函数初始化的(当然对于非内建型别), delete会调用析构函数释放内存;
最后记住一条 new来的内存用delete来释放, 不要用free,虽然delete也是调用free来释放内存的;malloc来的内存用free来释放, 他们之间不要交错使用,否则后果会很严重 ;
还有在c++中, 最好使用new和delete
大概如此,若有错误,请楼下的指正错误

89

主题

822

帖子

847

积分

高级会员

Rank: 4

积分
847
发表于 2007-9-10 10:38:00 | 显示全部楼层

Re:malloc,free和new,delete有什么区别?

我只知道如果要是使用Winsock2.0完成端口,最好使用GlobalAlloc,不能使用new,否则很多情况下会有问题。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-12-14 17:40

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表