微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

两个具有任意寿命且相互引用的对象?

如何解决两个具有任意寿命且相互引用的对象?

我想创建两个对象AB,以便A.b()返回对B的引用(如果它仍然存在),否则返回null,反之亦然B.a()。这个问题是否在以前某个地方的标准或广泛使用的实用程序库中解决了?

最近我遇到了两个单独的实例。我对C ++解决方案特别感兴趣,但了解Rust或其他非垃圾收集语言如何实现此目的可能会很有用。

我认为这可以通过引用计数来完成(使用A存储Bstd::shared_ptr并保留std::weak_ptr个引用),我也可以想到一种方法避免这种情况(使用您喜欢的任何方法来管理AB的生命周期,并存储纯引用和表示活动性的布尔值;当{{1}时在B内更新布尔值}删除,反之亦然;在多线程上下文中,添加一个锁)。但是我的工作场所不鼓励使用A,而后一种解决方案对我来说似乎有点复杂。我想知道有没有更简单的东西。

解决方法

此问题是否已通过标准解决?

是的。弱指针可用于实现此目的。

您已经注意到,析构函数也是如此。这一般不如弱指针适用。当您具有一对一关系时,它应该可以工作。

并存储普通引用和表示活跃度的布尔值

更简单的解决方案:使用指针。不需要布尔值,并且可以使对象可分配。

但是我的工作场所不鼓励使用std :: shared_ptr,而后一种解决方案对我来说似乎有点复杂。我想知道有没有更简单的东西。

您想与两个对象的生存期建立复杂的关系。我认为没有更简单的解决方案。您需要选择:

  • 使用共享和弱指针来阻止这种沮丧。仔细记录为什么需要它的原因。
  • 使用析构函数方法。我认为这并不复杂。
  • 重新设计,使您不需要这种复杂的关系。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。