首页 > 解决方案 > C ++存储容器元素的指针

问题描述

在我的应用程序中,我有一个std::list<TreeNode>是我的树节点的所有者。现在我希望能够访问 TreeNode 内的左右邻居,那么我应该使用哪个智能指针将邻居存储在 TreeNode 内?唯一适合这种情况的指针是原始指针,因为 TreeNode 不是其邻居的所有者,所以我几乎看不到智能指针在这里有什么用处。

此外,必须将 TreeNode 存储在其他容器中以便快速访问(以获得最高优先级的容器),所以我不能只存储 unique_ptr 的邻居,因为我还需要将它们存储在快速容器中(priority_queue)

标签: c++containerssmart-pointers

解决方案


那么我应该使用哪个(智能)指针将邻居存储在 TreeNode 中?

您应该使用合适的指针类型。

唯一适用于此的指针是原始指针

好吧,你去。如果原始指针是唯一合适的指针,那么使用不合适的智能指针将适得其反。


如果您无法为节点建立正确的生命周期,那么可以考虑共享所有权。一个简单的选择是始终使用共享指针。如果您希望将所有权主要保留在列表中,那么您可以在其他地方使用弱指针。


但我想使用智能指针,因为它们是现代 C++ 的必经之路

您误解了智能指针的意义。


推荐阅读