gpt4 book ai didi

c++ - 我应该主要在容器上使用 shared_ptr 还是 weak_ptr?

转载 作者:可可西里 更新时间:2023-11-01 16:27:23 25 4
gpt4 key购买 nike

我有两个标准容器。它们都具有指向相同数据结构的指针。第一个包含所有数据,第二个仅包含部分相同数据。我应该在第二个容器上使用 shared_ptr 还是 weak_ptr

首先,当我阅读引用资料时,我想到了在第一个集合上使用 unique_ptr。我的第一个集合包含所有数据,并且是唯一“拥有”的数据。这意味着如果数据不存在,则应将其删除。但是当我尝试创建第二个系列时,我不知道该怎么做。我创建了一个唯一指针,但现在我需要另一个指针指向同一个元素,破坏了唯一性,但实际上真正的所有者不是新指针。所以我明白(我希望我没有错)唯一性是在到达元素的路上而不是(例如)删除它的可能性。所以,shared_ptr。我把它们放在我的第一个系列中。但是现在第二个出现了,我想在这里也使用 shared_ptr 。访问相同数据的方式可能是两种,所以所有者是两个。但在我的例子中,数据总是从前一秒开始删除。如果我使用 weak_ptr ,所有者的数量将不会增加。在这两种情况下,元素都将在第一个集合需要时被删除。最后,我使用了 shared_ptr 因为使用 weak_ptr 我需要 lock() 每行代码中的每个指针,从而降低可读性.但是我真正应该使用什么?

最佳答案

这听起来不像您需要 std::shared_ptr 因为您的数据在一个地方拥有。

我建议在所属容器中使用 std::unique_ptr,然后将原始指针简单地放入第二个和后续容器中。

这是可行的,因为您永远不会删除原始指针,但它们指向的数据仍由智能指针管理,因此在您不再需要时将被释放。

尽管有一些负面报道,原始指针在用作非拥有访问者时是非常值得尊敬的,这些访问者将在适当的时候删除它的一些其他实体所拥有的数据.

关于c++ - 我应该主要在容器上使用 shared_ptr 还是 weak_ptr?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31778308/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com