Tam*_*lei 3 c++ design-patterns smart-pointers cyclic-reference
我知道有weak_ptr打破循环,但这是一个修复,在发现问题后。是否有可用于检测或避免循环引用的模式或工具?
您可以通过设计避免这种情况。正如 Stephan T. Lavavej 在 GoingNative2012 会议上很好地指出的那样(你可以在线查看视频),“所有权”是一个有向无环图,一个 DAG。DAG 中没有循环。如果您的所有权图不是 DAG,那么您的设计……是有问题的,因为 A 拥有 B 和 B 拥有 A 毫无意义。但是 shared_ptr 是“共享所有权指针”。持有这种指针的对象或作用域拥有指针对象。尝试从所有权图的角度思考。
shared_ptr 不是适用于所有情况的正确工具。它不应该允许您像在 Java 中那样进行编码,而您不必考虑所有权(很多)。它应该提供自动和确定性的清理。如果您需要一个“非拥有”指针,weak_ptr 或原始指针是合适的。只要确保原始指针指向的对象存活足够长的时间即可。
| 归档时间: |
|
| 查看次数: |
1564 次 |
| 最近记录: |