woaidongmao

文章均收录自他人博客,但不喜标题前加-[转贴],因其丑陋,见谅!~
随笔 - 1469, 文章 - 0, 评论 - 661, 引用 - 0
数据加载中……

内存管理(operator new与new operator)

 

 

今天看了大名鼎鼎的Scott Meyers所著的〈effective c++〉和〈more effective c++〉中关于newdelete的介绍,惊讶不已,大师果然名不虚传,研究的如此细致、透彻,让我这个菜鸟受益非浅(窃喜,呵呵)。

       C++new operatoroperator new非一回事也,new operator(即所谓的new expression)乃语言内建,咱们是没法改变其行为的,当你写string *ps = new string("Hands up!")时,你所使用的new是所谓的new operator,它其实干了两件事:一、分配足够的内存(实际大小是大于所创建的对象大小)二、调用对象构造函数,new operator永远干这两件事。上面的那段代码大约反映以下的行为:

      void *mem = operator new(sizeof(string));

     call string::string("Hands up!") on *mem;

     string *ps = static_cast<string*>(mem);

也就是说operator new仅仅分配内存(就像malloc一样),我们能够做的仅仅是重载operator new,为自己的类创建一个定制的内存管理方案,这也让我有点明白为什么在重载operator new的时候并没有写调用构造函数的代码,但它确实被调用了,原来都是new operator搞的鬼。

 

posted on 2010-06-29 20:39 肥仔 阅读(507) 评论(0)  编辑 收藏 引用 所属分类: C++ 基础


只有注册用户登录后才能发表评论。
【推荐】超50万行VC++源码: 大型组态工控、电力仿真CAD与GIS源码库
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理