35、C++ Primer 4th笔记,特殊工具与技术,优化内存分配(2)-阿里云开发者社区

开发者社区> hopegrace> 正文

35、C++ Primer 4th笔记,特殊工具与技术,优化内存分配(2)

简介: 9、正如定位new(placement new expression)表达式是使用allocator类的construct成员的低级选择,可以使用析构函数的显式调用作为调用destroy函数的低级选择。
+关注继续查看

9、正如定位new(placement new expression)表达式是使用allocator类的construct成员的低级选择,可以使用析构函数的显式调用作为调用destroy函数的低级选择。

示例代码

	for (T *p = first_free; p != elements; /*empty*/)
		alloc.destroy(--p);
	//上式表达与下式表达等价
	p->~T();

10、显式调用析构函数是清除对象本身,并没有释放对象所占的内存;调用operator delete函数不会运行析构函数,它只释放指定的内存。

11、类通过定义自己的名为operator newoperator delete的成员,可以管理用于自身类型的内存。

编译器看到类类型(for a class type)的newdelete表达式的时候,它查看该类是否有operator newoperator delete成员,如果类定义(或继承)了自己的成员newdelete函数,则使用那些函数为对象分配和释放内存;否则使用标准库版本。

优化newdelete的行为的时候,只需要定义operator newoperator delete的新版本,newdelete表达式自己照管对象的构造撤销。

12、在自定义newdelete的时候,应当成对定义。要用自定义全用,要用全局的也全用全局的。

可以通过全局作用域确定操作符来强制newdelete表达式使用的是全局的库函数。

示例代码

Type *p = ::new Type; //uses global operator new
::delete p; //uses global operator delete

13、如果基类有 virtual 析构函数,则传给 operator delete 的大小将根据被删除指针所指对象的动态类型而变化;如果基类没有 virtual 析构函数,那么,通过基类指针删除指向派生类对象的指针的行为,跟往常一样是未定义的。

    这些函数(operator newoperator delete)隐式地为静态函数,不必显式地将它们声明为static。成员 new delete 函数必须是静态的,因为它们要么在构造对象之前使用(operator new),要么在撤销对象之后使用(operator delete),因此,这些函数没有成员数据可操纵。像任意其他静态成员函数一样,new delete 只能直接访问所属类的静态成员。

14、一个通用策略是预先分配一场原始内存来保存未构造的对象,创建新元素的时候,可以在一个预先分配的对象中构造;释放元素的时候,将它们放回预先分配对象的块中,而不是将内存实际返还给系统。这种策略常被称为维持一个自由列表。可以将自由列表实现为已分配但未构造的对象的链表。

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
对Bitmap的内存优化
<p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px; font-family:Arial; font-size:14px; line-height:26px"> 在Android应用里,最耗费内存的就是图片资源。而且在Android系统中,读取位图Bitmap时,分给虚拟机中的图
1297 0
《C Primer Plus》读书笔记——存储类、链接和内存管理
背景 距离上次写读书笔记的日子已有半个月了。这段时间一直在做摄像头直立平衡车,也把《C Primer Plus》的中级部分扫了一遍。现在做赛道算法识别遇到瓶颈了,就想把读书笔记补回来。
879 0
查找工具grep|学习笔记
快速学习查找工具grep
36 0
WPF 内存泄漏优化经历
原文:WPF 内存泄漏优化经历 最近公司有个CS客户端程序,有个登录界面,有个程序的主界面,程序支持注销功能,但是在注销后,客户端的内存一直以40M-50M的速度递增,因此猜测,应该是WPF程序出现了内存泄漏。
1129 0
前端内存优化的探索与实践
标注是地图最基本的元素之一,标明了地图每个位置或线路的名称。在地图 JSAPI 中,标注的展示效果及性能也是需要重点解决的问题。
398 0
使用 Chrome 开发者工具分析内存问题
使用 Chrome 开发者工具分析内存问题
15 0
+关注
698
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载