c 内存管理基础之new.doc

c 内存管理基础之new.doc

ID:51946361

大小:69.00 KB

页数:5页

时间:2020-03-20

c 内存管理基础之new.doc_第1页
c 内存管理基础之new.doc_第2页
c 内存管理基础之new.doc_第3页
c 内存管理基础之new.doc_第4页
c 内存管理基础之new.doc_第5页
资源描述:

《c 内存管理基础之new.doc》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、C卄内存管理基础之new&delete出处:Examlink作者:刀断水日期:2007年08月09日14时33分内存管理的基础是要知道怎么获得以及释放内存,如你所知,在C/C++屮就是调用now和delete操作。1.分清operatornew和newoperator全局函数operatornew通常这样声明:void*operatornew(size_tsize);返回值类型是void*,表示其返回的是一个未经处理(raw)的指针,扌旨向未初始化的内存。参数size_t确定分配多少内存。你能增加额外的参数重载函数operatornew,但是第一个参数类型必须是s

2、ize_t。头文件up有一个很好的重载的例了,那就是placementnew,它看上去彖这样:void*operatornew(size_t,void*location){returnlocation;}这初看上去有些陌生,但它却是new操作符的一种常见重载方法,使用一个额外的变量buffer,当new操作符隐含调用operatornew函数时,把这个变量传递给它。被调用的operatornew函数除了持有强制的参数size_t外,还必须接受void*指针参数,指向构造对象皆用的内存空间。未被使用的(但是强制的)参数size_t没有参数名字,以防止编译器

3、警告说它未被使用。在使用placementnew的情况下,调用者已经获得了指向内存的指针,因为调用者知道对彖应该放在哪里。placementnew需要做的就是返冋传递给它的指针。我们更经常使用的new是new操作符(newoperator),而非操作符new(operatornew),如当你使用new操作符构建一个对象的时候,实际上做了两件事情,一是调用operatornew函数获取内存,二是调用对彖的构造函数,如:string*ps=nowstring(z,Hello,world!,z);它完成与下面代码相似的功能://为String对象得到未//调用构造函数初

4、始化内//ps指针指向新的对象void^memory=operatornew(sizeof(string));经处理的内存callstring::string("Hel]o,world!")on^memory;存屮的对彖string*ps=staticcasKstring*>(memory);注意第二步屮构造函数的调用只能由编译器完成,用八是不允许这样操作的,也就是说如果你想建立一个堆对彖就必须用new操作符,不能真接像上而一样调用构造函数来初始化堆对象。new操作符(newoperator)是编译器内置的,其行为被语言固定下來,不受用户控制。但是它们所调用的内存

5、分配函数也就是操作符new(operatornew)则可以根据需要进行重载。试看冋顾new操作符(newoperator)与操作符new(operatornew)的关系,如果你想在堆上建立一个对象,应该用new操作符。它既分配内存又为对象调用构造函数。如果你仅仅想分配内存,就应该调用operatornew函数,它不会调用构造函数。如果你想定制H己独有的内存分配过稈,你应该重载全局的operatornew函数,然后使用new操作符,new操作符会调用你定制的operatornew。如果你想在一块己经获得指针的内存里建立一个对象,应该使用placementnew0最后

6、需要记住的一点是,delete和new—样具有以上的特性,只是需要注意的一点是delte操作符屮是首先调用对象的析构函数,然后再调用operatordelete函数的。1.针对数组的ne讥]和delete[]操作建立数组时new操作符(new[])的行为与单个对彖建立(new)有少许不同:第一是内存不再调用用operatornew函数进行分配,代替以operatornew[]函数(常称作arraynew)。它与operatornew—样能被重载,允许定制数组的内存分配,就象定制单个对象内存分配一样。第二个不同是nev[]操作时调用构造函数的数最。对于new[]而

7、言,在数组里的每一个对象的构造函数都必须被调用。delete]]操作符的语义基本上和new[]相同,他们的实现类似这样:void*operatornew[](sizetsize)cout<<"newsizeofarrayinnew[]():"<

8、ete函数

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。