我再强调一遍,A&在设计上并不能对生存期问题有任何“更明确一些”的效果。
A*对生存期有着和A&完全一样的设计效果(因为有所有权的指针都换成unique_ptr了)
【 在 ziqin (子青|会挽雕弓如满月|西北望|射天狼) 的大作中提到: 】
: 标 题: Re: 这种情况下我该不该把unique_ptr改成shared_ptr?
: 发信站: 水木社区 (Mon Jul 26 11:12:39 2021), 站内
:
: 如果要一定保证不失效,就只有使用shared_ptr或者weak_ptr
:
: 楼主的问题是不是要牺牲效率而从代码级别保证访问callback不会出问题
:
: 如果callback有可能会在B的生存期内失效,那就不需要讨论,直接上weak_ptr
:
: 如果callback确保不会在B的生存期失效,并且从楼主的描述来看,callback是在B创建的时候就建立了,并且就是拥有m_b的那个A的instance,那用A&在设计上会更明确一些
:
: 如果callback指向的不是拥有m_b的那个A的instance,那用raw pointer只有从构架上保证callback的生存期比m_b长了。
:
: 需不需要用weak_ptr,还是却决于类的使用环境。如果有一个统一的container来管理所有A instance的生存周期,那用raw pointer就可以。要在完全去耦合,从类的设计上就保证不出问题,肯定是要损失效率的
:
:
:
: 【 在 here080 的大作中提到: 】
: : A&只是一个必须初始化且无法重定向的A*而已
: : A&引用的东西跟指针指向的一样,是否失效不是语言本身保证的。
: :
:
: --
:
: ※ 来源:·水木社区
http://www.mysmth.net·[FROM: 36.23.69.*]
--
FROM 76.126.252.*