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)