侵入性与非侵入性注射指数

侵入性与非侵入性注射指数,第1张

概述在过去几年中,我普遍接受了这一点 如果我要使用引用计数的智能指针 入侵智能指针是要走的路 – 但是,由于以下原因,我开始喜欢非侵入式智能指针: >我只使用智能指针(所以没有Foo *躺在,只有Ptr) >我开始为每个类创建自定义分配器. (所以Foo会超载运算符新). >现在,如果Foo有一个所有Ptr的列表(因为它可以非侵入式智能指针). >然后,我可以避免内存碎片问题,因为类Foo移动对象(只 在过去几年中,我普遍接受了这一点

如果我要使用引用计数的智能指针

入侵智能指针是要走的路

但是,由于以下原因,我开始喜欢非侵入式智能指针:

>我只使用智能指针(所以没有Foo *躺在,只有Ptr)
>我开始为每个类创建自定义分配器. (所以Foo会超载运算符新).
>现在,如果Foo有一个所有Ptr的列表(因为它可以非侵入式智能指针).
>然后,我可以避免内存碎片问题,因为类Foo移动对象(只是更新相应的Ptr).

非侵入性智能指针中的这个Foo移动对象比入侵智能指针更容易的唯一原因是:

在非侵入式智能指针中,只有一个指针指向每个Foo.

在入侵智能指针中,我不知道有多少对象指向每个Foo.

现在,非侵入式智能指针的唯一代价是双重间接. [也许这会拧紧缓存].

有没有人有一个很好的学习昂贵这个额外的间接层是?

编辑:通过智能指针,我可能指的是别人称之为“共享指针”;整个想法是:有一个引用计数附加到对象,当它命中0时,对象被自动删除

解决方法 侵入性或非侵入性指标之间有以下几个重要区别:

第二(无创)的最大优势:

实现对第二个弱引用(即shared_ptr / weak_ptr)简单得多.

首先的优点是当您需要获取智能指针(至少在boost :: shared_ptr,std :: tr1 :: shared_ptr的情况下)

>您不能在构造函数和析构函数中使用shared_ptr.>在类的层次结构中有shared_from是非常不寻常的.

总结

以上是内存溢出为你收集整理的侵入性与非侵入性注射指数全部内容,希望文章能够帮你解决侵入性与非侵入性注射指数所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1249765.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-07
下一篇 2022-06-07

发表评论

登录后才能评论

评论列表(0条)

保存