Pot*_*ter 18 c++ inheritance operator-overloading new-operator
我刚刚回答了一个关于缺少与新位置相对应的展示位置删除的问题.原因似乎operator delete
是根据对象的动态类型调用的方式(对应于用于查找的类型operator new
).
安置new
对我有用.在自定义分配方面,可能存在一个可重用的类,其中不同的实例管理不同的池.单身人士是一种反模式,所有这一切.
我可以理解在new thing;
不跟踪分配器的情况下完成工作的便利性,但是为类型层次结构的不同分支做事似乎相当复杂.
是否存在一个真实场景,派生类使用与其基础不同的分配器,并依赖虚拟析构函数来查找正确的成员operator delete
?
为了避免这种主观,我会接受最合理的答案.让我们不要嘲笑代码气味或"最好"的做事方式.
我过去实际上用过这个!它对非均匀内存架构很有用 - 平台具有非常小的非常快的内存区域而没有操作系统等.
具体而言,设想例如具有少量TCM的ARM芯片(紧密耦合的存储器;基本上,嵌入在SoC上的SRAM,具有例如1个周期的访问时间).
然后我们在产品开发的最后阶段使用分析器结果 - 就在发货之前(例如,想象这是一个流行的手持游戏系统的盒式磁带) - 确定某些类将从这个更快的SRAM中受益.
一个简单的成员operator new
利用这个TCM来实现派生类现在可能有意义:我们不能使用这个SRAM来拥有整个类层次结构,但对于某些低实例化计数但使用频繁的派生类,它变为简单有效的优化.通过这种方式重定向某些分配,我们在少数情况下得到了2%-10%或更多的帧时间.
小智 5
我实际上从未在派生类中使用过new/delete重载,或者我曾经想过它,但这个问题很有意思,我决定进行一些研究并试一试.我找到了几个合适的参考文献:
ARM http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.faqs/ka14267.html
这个引用实际上有一个派生类的示例代码,它重载了它的基类重载new.
范德比尔特大学 http://www.vuse.vanderbilt.edu/~adamsja/Courses/CS251/Projects/4/memPool.pdf
这个引用没有明确提供有关在派生类中重载new的任何材料,但是,它提到了一些有趣的原因,为什么要重载new.原因包括:
现在基于这两个引用,我已经确定在派生类中重载new/delete可能有一些原因.我的理由基本上与我在VU演示文稿中列出的原因相一致,但基于ARM参考意味着我是嵌入式或专用场景,这似乎也是相关的.
再一次,我没有找到理由或实际上实现了你提到过的东西,但这些是我的想法,稍作调查.
归档时间: |
|
查看次数: |
1103 次 |
最近记录: |