【问题标题】:Custom Weak/Strong Reference Pointers自定义弱/强引用指针
【发布时间】:2011-03-14 00:30:13
【问题描述】:

我正在创建自己的弱/强引用指针关系实现,我对配置感到困惑。当我有一个包含强引用的类,并且我想将强指针设置为另一个具有弱引用的类时,我应该传入一个weak_ref指针的指针吗?

如果有人可以查看此代码并让我知道我会应用它,如果您发现任何其他问题,请告诉我。我把这三个文件放到了codepad文件中,这样这个页面就不会变得繁琐了。

WeakReference.h:http://codepad.org/nNtRk4vO

StrongReference.h : http://codepad.org/MGi0fZ4J

请不要将其变成“使用 boost,使用 std,使用 tr1”的参数,我正在寻求有关此代码的帮助,而不是使用其他东西。

【问题讨论】:

  • main.cpp : codepad.org/nNtRk4vO (必须这样做,因为我是新用户)
  • 这是一个编程练习吗?或者也许是家庭作业?如果没有,为什么不使用 boost 中可用的功能?
  • 这是一个编程练习,我一直想学习做这个,我喜欢实现很多我自己的东西。有些人可能会说它是多余的,因为它已经存在,但我觉得它很有趣。
  • 一点也不多余,有时这是最好的学习方式。我问是因为有些用户会建议不带 homework 标签的 boost。

标签: c++ pointers garbage-collection smart-pointers unsafe-pointers


【解决方案1】:

我所看到的以及我从事的使用强引用和弱引用概念的实现都使用两个计数。有时一个计数是弱引用的数量,另一个是强引用的数量。其他时候,其中一个计数表示强引用 + 弱引用的总和。有时还有其他方案。但是我还没有看到像你的那样只有一个计数的实现。

如果你写了一个规范来说明 strong_ref 和 weak_ref 的行为应该是什么,也许会有所帮助。我发现编写规范的行为实际上可以帮助调试实现。它迫使您考虑输入、输出、极端情况、无效情况等。

【讨论】:

  • 当我计划这个时,我做了一个小规范,它基本上只是引用计数。对我来说,它只有一个计数器,因为它们应该只有一个 strong_ref (由拥有它的人拥有),其余的应该是 weak_ref (依赖它的人)。这是典型的关系吗?
  • 在 C++0x(和 boost)shared/weak_ptr 模型中,shared_ptr 对对象的构造状态以及对象所在的内存分配的共享所有权。 weak_ptrs 仅共享已分配内存的所有权(与 shared_ptrs 一起)。当你想通过一个weak_ptr进行引用时,你首先必须将它转换为一个shared_ptr,如果对象已经被破坏,这可能会失败。
猜你喜欢
  • 2011-07-19
  • 1970-01-01
  • 2013-03-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-16
  • 1970-01-01
  • 2013-10-01
相关资源
最近更新 更多