const,status,内存分配,new,delete,malloc,free的区别

ap3344 2003-11-23 10:46:49
const,status,内存分配,new,delete,malloc,free的区别
谢谢!!
...全文
164 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
sixsavage 2003-11-23
  • 打赏
  • 举报
回复
问:malloc的效率体现在哪里?
sixsavage 2003-11-23
  • 打赏
  • 举报
回复
看到书上的一个例子就明白多了。
class Cobj
{
public:
Cobj(){}
~Cobj(){}
void Initialize(void){}
void Destroy(void){}
};

void UseMallocFree(void)
{
Cobj *a=(Cobj *)malloc(sizeof(Cobj)); //申请动态内存
a->Initialize();
//...
a->Destroy();
free(a);
}//由于malloc和free不能调用构造函数和析构函数,所以只有调用成员函数来完成初始化
//和清除工作。

void UseNewDelete(void)
{
Cobj *a=new Cobj;
//...
delete a;
}//用new delete是不是要简单很多了。
fireseed 2003-11-23
  • 打赏
  • 举报
回复
向前兼容,还有就是malloc的效率会比new高一些
sixsavage 2003-11-23
  • 打赏
  • 举报
回复
有疑问就是,为什么c++有了new和delete后还要保留malloc和free呢
fireseed 2003-11-23
  • 打赏
  • 举报
回复
new和delete是一对,malloc和free是一对

new和delete是C++里的,因为C++的面向对象特性,所以在用new和delete对对象进行申请和释放时会掉用对象的构造和析构函数。

malloc和free只是单纯的申请内存空间,不会做其它的一些事情
piaoairy 2003-11-23
  • 打赏
  • 举报
回复
const:
好像const在最初的C语言版本里没有, 是后来C借鉴C++的, e.g:
const int c = 0, 表示在程序中定义一个值始终为10的int型变量c;
和pascal中的const类似。
#define c 10 (enum {c = 0};)
最初C都是用#define来定义的, enum也是ANSI C 89后来加的.

static:
(当static表示变量的存储类型时)
假设在一函数func()中定义一个static变量, e.g:

#include <stdio.h>
void func(void)
{
static int si=0;
si++;
printf("si = %d\n", si);
}

int main()
{
func();
func();
func();
getch();
}
则依次输出1, 2, 3;而不是1, 1, 1(如果不加static)。
既调用同一个函数时为static类型的变量si在堆中分配一个固定不变的内存地址,并且每次调用时不改变si原来的值。

关于内存分配范围太广, 说一下自己的见解。
C语言中用malloc(), free()函数来动态分配内存, 而C++则推荐使用运算符
new 和delete, 也兼容C的这两个函数。不过由于malloc()每次都有进行强制转换因此在
C++中用的不多。注意每一个malloc(),new都要对应一个free(), delete, 否则会一起内存泄漏。

==在下愚见, 希望大家指点。
sixsavage 2003-11-23
  • 打赏
  • 举报
回复
status为何物?

malloc和free为函数,new和delete为操作符。
malloc在申请内存空间的时候要输入该数据结构的字节数,而new不用。
。。。
其他的没有时间在打,吃饭去了,回来再说
sspanzer 2003-11-23
  • 打赏
  • 举报
回复
不用初始化对象呗:)
此外new可以被重载。

64,642

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧