<b>More Effective C++:差别new和delete</b>[VC/C++编程]
本文“<b>More Effective C++:差别new和delete</b>[VC/C++编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
人们有时仿佛喜好成心使C++语言的术语难以理解.比方说new操作符(new operator)和operator new的辨别.
当你写这样的代码:
string *ps = new string("Memory Management");
你利用的new是new操作符.这个操作符就象sizeof一样是语言内置的,你不能改变它的含义,它的功效老是一样的.它要完成的功效分成两部份.第一部份是分配充足的内存以便包容所需范例的对象.第二部份是它调用构造函数初始化内存中的对象.new操作符老是做这两件事情,你不能以任何方法改变它的行为.
你所能改变的是如作甚对象分配内存.new操作符调用一个函数来完成必须的内存分配,你可以重写或重载这个函数来改变它的行为.new操作符为分配内存所调用函数的名字是operator new.
函数operator new 普通这样声明:
void * operator new(size_t size);
返回值范例是void*,因为这个函数返回一个未经处理(raw)的指针,未初始化的内存.(假如你喜好,你能写一种operator new函数,在返回一个指针之前可以初始化内存以存储一些数值,但是普通不这么做.)参数size_t肯定分配多少内存.你能增添额外的参数重载函数operator new,但是第一个参数范例必须是size_t.(有关operator new更多的信息拜见Effective C++ 条款8至条款10.)
你普通不会直接调用operator new,但是一旦这么做,你可以象调用别的函数一样调用它:
void *rawMemory = operator new(sizeof(string));
操作符operator new将返回一个指针,指向一块充足包容一个string范例对象的内存.
就象malloc一样,operator new的职责只是分配内存.它对构造函数一无所知.operator new所理解的是内存分配.把operator new 返回的未经处理的指针传送给一个对象是new操作符的工作.当你的编译器碰见这样的语句:
以上是“<b>More Effective C++:差别new和delete</b>[VC/C++编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |