编程交流与学习--More Effective C++的学习-Item M8:理解各种不同含义的new和delete

new操作符(new operator)和new操作(operator new)的区别。

    string *ps = new string("Memory Management");使用的newnew操作符。这个操作符就象sizeof一样是语言内置的,你不能改变它的含义,它的功能总是一样的。它要完成的功能分成两部分。第一部分是分配足够的内存以便容纳所需类型的对象。第二部分是它调用构造函数初始化内存中的对象。new操作符总是做这两件事情,你不能以任何方式改变它的行为。

    new操作符为分配内存所调用函数的名字是operator new。就象malloc一样,operator new的职责只是分配内存。它对构造函数一无所知。operator new所了解的是内存分配。把operator new 返回的未经处理的指针传递给一个对象是new操作符的工作。

当你的编译器遇见这样的语句:

string *ps = new string("Memory Management");

它生成的代码或多或少与下面的代码相似:

void *memory = operator new(sizeof(string));// 得到未经处理的内存为String对象

call string::string("Memory Management") on *memory; //初始化内存中的对象

string *ps = static_cast<string*>(memory); // ps指针指向新的对象

 补充:作者强调了placement new对应的delete方法是显式调用析构函数。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值