C++ 存储容器元素的指针
C++ store pointer of element of container
在我的应用程序中,我有一个 std::list<TreeNode>
是我的树节点的所有者。现在我希望能够访问一个TreeNode内部的左右邻居,那么我应该使用哪个智能指针来存储一个TreeNode内部的邻居呢?唯一适用于此的指针是原始指针,因为 TreeNode 不是其邻居的所有者,所以我几乎看不出智能指针在这里有何用处。
此外,TreeNodes 必须存储在其他容器中以便快速访问(具有最高优先级),所以我不能只存储 unique_ptr 个邻居,因为我还需要存储它们装在快速容器中 (priority_queue)
so which (smart) pointer should I use to store the neighbors inside a TreeNode?
您应该使用合适的指针类型。
The only pointer suitable for this is a raw pointer
好了,好了。如果原始指针是唯一合适的,那么使用不合适的智能指针会适得其反。
如果您无法为节点建立正确的生命周期,那么可以考虑共享所有权。一个简单的选择是始终使用共享指针。如果您希望将所有权主要保留在列表中,那么您可以在其他地方使用弱指针。
But I want to use smart pointers because they are the way to go in modern C++
你误解了智能指针的意义。
在我的应用程序中,我有一个 std::list<TreeNode>
是我的树节点的所有者。现在我希望能够访问一个TreeNode内部的左右邻居,那么我应该使用哪个智能指针来存储一个TreeNode内部的邻居呢?唯一适用于此的指针是原始指针,因为 TreeNode 不是其邻居的所有者,所以我几乎看不出智能指针在这里有何用处。
此外,TreeNodes 必须存储在其他容器中以便快速访问(具有最高优先级),所以我不能只存储 unique_ptr 个邻居,因为我还需要存储它们装在快速容器中 (priority_queue)
so which (smart) pointer should I use to store the neighbors inside a TreeNode?
您应该使用合适的指针类型。
The only pointer suitable for this is a raw pointer
好了,好了。如果原始指针是唯一合适的,那么使用不合适的智能指针会适得其反。
如果您无法为节点建立正确的生命周期,那么可以考虑共享所有权。一个简单的选择是始终使用共享指针。如果您希望将所有权主要保留在列表中,那么您可以在其他地方使用弱指针。
But I want to use smart pointers because they are the way to go in modern C++
你误解了智能指针的意义。