Krz*_*wek 10 c++ smart-pointers shared-ptr weak-ptr c++11
有时我真的很确定我想要循环依赖指针,并且循环中的每个对象都应该能够使用他的指针(所以它不能是weak_ptr).
我的问题是:这是否意味着我的设计不好?
如果我想实现图形怎么办?我可以使用智能指针吗?在图表中有循环,但使用weak_ptr我不能使用" - >".我能做什么?
我在StackOverflow上阅读了一些文章,参考和主题,但看起来我仍然没有得到智能指针.真的,为什么不存在一些带有" - >"的weak_ptr变体?
Rei*_*ica 30
从概念方面而不是实施方面来解决这个问题.智能指针代表所有权.并且智能指针的存在不会使原始指针作为非拥有观察者的角色无效.
每个对象是否都有一个明确定义的所有者(例如,图表拥有其所有顶点和边缘)?如果是这样,用于std::unique_ptr保持图形中的顶点和边,并使用顶点和边内的原始指针来相互引用.
共享所有权是否适用(例如,只要至少有一个边连接到顶点,就只存在一个顶点)?如果是这样,请使用std::shared_ptr表示所有权,再次使用非拥有观察者的原始指针.如果你需要相互所有权(即所有权周期),其中"只要一个边缘引用它就存在一个顶点,只要一个顶点引用它就存在一个边缘",那么1.仔细检查这样的设计是正确和可维护,以及2.如果是这样,请std::weak_ptr在周期中的某处使用以打破所有权循环.您可以随时lock()一weak_ptr来获得shared_ptr.
对于您的特定图表场景,我相信"图表所拥有的一切"将是最合乎逻辑的所有权方案; 但这取决于你的任务的特质.