关于new operator 和operator new

C++语句:string *pStr = new String;
由编译器产生的new operator的近似代码:
{
    void *memory = operator new(sizeof(string));
    // 然后在memory所代码的内存块上调用string类相应的构造函数
    // 这里要注意的是:所谓的构造函数是由编译器自动调用的,程序
    // 员并没有直接调用构造函数的权利
    string *ps = static_cast<string*> (memory);
}

 

C++规定new operator所执行的内容不容许更改,即不允许对该操作符进行重载, 只允许程序员对operator new操作符进行重载和编写自己的构造函数来间接影响new operator具体行为的方式. operator new的功能类似与C语言中的malloc函数,都只用于分配未经初始化的内存, 其相应的内存释放函数由operator delete提供,而所谓的placment new只不过是operator new的一个重载操作符而已,并仅仅只是直接返回传递进行的已分配好的内 存指针,由对应的placement delete对其转送的内存进行释放.

 

总之new operator的具体执行内容为:
1.分配内存
2.在该内存上调用相应的构造函数以初始化该内存
3.对指针进行转型并返回


delete operator的具体执行内容为
1.调用相应的析构函数
2.释放内存

文章出处:DIY部落(http://www.diybl.com/course/3_program/c++/cppjs/20090303/157213.html)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值