Effective Modern C++第 137 页的最后一个示例描绘了一个数据结构的场景,其中包含对象A
、对象B
和对象,C
它们通过std::shared_ptr
以下方式相互连接:
std::shared_ptr std::shared_ptr
A ─────────────────▶ B ◀───────────────── C
对我来说,这意味着对象和实例的类(通常是两个不相关的类)必须包含一个成员。A
C
std::shared_ptr<classOfB>
然后假设我们需要一个从B
back 到的指针A
,并列出了可用的选项:指针可以是原始的、共享的或弱的,最后一个被选为最佳候选者。
std::shared_ptr std::shared_ptr
A ─────────────────▶ B ◀───────────────── C
▲ │
│ std::weak_ptr │
└────────────────────┘
我确实理解前两种选择的弱点(啊哈),但我也看到第三种选择要求该成员A
已经由 some 管理std::shared_ptr
,否则怎么能std::weak_ptr
指出它呢?
然而,这本书并没有提到这个“限制”/假设/无论如何,所以事实是
- 我错了
- 我是对的,但出于某种我不明白的原因,这个假设很明显
std::weak_ptr
由于 a需要一个已经存在于同一个对象的确切原因,这个假设是显而易见的std::shared_ptr
,但我认为它在示例开头甚至没有提到它有点奇怪。
我问这个问题是为了理解这一点。