c++指针在寻径中的所有权



我正在编写一个寻径算法,所以我有TreeNode,代表节点,但在我的算法中,我有一个open容器,是priority_queue,它允许快速检索最高优先级节点。我还需要快速检查我是否已经探索了一个给定的节点,所以我有一个closed容器,它是set

现在的问题是:谁拥有什么?我的TreeNodes存储在哪里?openclosed容器不需要存储节点本身,它们可以只是有一个指向它们的指针,但是我在哪里存储节点呢?

我的想法是存储在这些容器weak_ptr<TreeNode>,当我想创建一个新的TreeNode我使用make_shared<TreeNode>?或者我可以有一个vector<TreeNode>来存储所有节点,而其他容器只存储索引,这样我就避免了昂贵的shared_ptr?

我确实会将对象的所有权与算法本身分开。

如果你确定在算法执行期间你将有固定数量的节点,你可以使用vector<TreeNode>,它是预先完全创建的。然后,您可以使用指向元素或其下标的指针并对其进行操作。指针稍微灵活一些,因为你可以将底层存储容器更改为不连续的东西(例如std::set,甚至将它们存储在map或其他完全)。这样就没有额外的视觉和代码开销了。算法代码是不必要的,所有权问题是微不足道的,这总是一件好事。

相关内容

  • 没有找到相关文章

最新更新