登录  
 加关注
查看详情
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

西部软件部落

程序人生,路漫漫其修远兮

 
 
 

日志

 
 
关于我

擅长Linux C,Shell,GTK,Oracle技术,熟悉支付网关,POSP收单领域。喜欢开源。注:本站原创文章欢迎转载,转载时请注明出处。

(原创)说说C++中的malloc与new  

2007-06-16 09:44:15|  分类: 软件开发 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

    很多人都知道malloc与new都是用来申请空间用的,开辟空间来源于堆中。但是在C++中却很少用malloc去申请空间,为什么会这样?后面会有个很有说服力的例子,相信大家一看就能明白。C++程序的格局可分为4个区,注意是“格局”,
1、全局数据区 2、代码区 3、栈区 4、堆区
其中全局变量,静态变量是属于全局数据区;所有的类和非成员函数的代码都存放在代码区;为成员函数运行而分配的局部变量的空间都在栈区,剩下的那些空间都属于堆区。
下面来写个简单的例子
#include <iostream.h>

class Test
{
 public:
 Test()
 {
  cout<<"The Class have Constructed"<<endl;
 }
 ~Test()
 {
  cout<<"The Class have DisConstructed"<<endl;
 }
};
int main()
{
 Test *p=(Test*)malloc(sizeof(Test));
 free(p);
 return 0;
}
编译运行:The Class have DisConstructed
结果是没有调用构造函数,从这个例子可以看出,调用malloc后,malloc只负责给对象指针分配空间,而不去调用构造函数对其初始化。而C++中一个类的对象构造,需要是分配空间,调用构造函数,成员的初始化,或者说对象的一个初始化过程。通过上述例子希望大家在使用C++中尽量不要去使用malloc,而去使用new。

#include <iostream.h>
class Test
{
 public:
 Test()
 {
  cout<<"The Class have Constructed"<<endl;
 }
 ~Test()
 {
  cout<<"The Class have DisConstructed"<<endl;
 }
};
int main()
{
 //Test *p=(Test*)malloc(sizeof(Test));
 Test *p=new Test;
 cout<<"test";
 delete p;
 return 0;
}

看真正的效果。。。  

  评论这张
 
阅读(2626)| 评论(3)

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018