gpt4 book ai didi

用于资源管理的 C++ shared_ptr 与 unique_ptr

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:04:13 28 4
gpt4 key购买 nike

我一直在考虑使用 unique_ptrshared_ptrown_solution。我对后者打了折扣,因为我几乎肯定会弄错,但我对 unique_ptrshared_ptr 都有问题,因为它们都不能准确捕获我想要的内容。我想创建一个明确拥有资源的资源管理器,但我希望资源管理器也分发对该资源的引用。

如果我在资源管理器中使用 unique_ptr 并分发原始指针,则它们有可能逃逸到其他地方(尽管我想这会违反类“契约”)。如果我使用 shared_ptr 并分发 weak_ptr,没有什么可以阻止调用者将 weak_ptr 转换为 shared_ptr 并且存储它,从而可能创建一个循环或更糟的是,资源在资源管理器的生命周期之后仍然存在。所以我想我正在寻找的是一个无法转换为 shared_ptr 的可推导 weak_ptr

或者我只是想通过代码中一些措辞强硬的注释来执行契约(Contract)?

感谢您对此的任何想法。

最佳答案

最后,你不能强制任何人倾听。询问微软、苹果或任何开源库开发人员,他们都知道这首歌。用正确的词和地方发表评论是您最好的选择。

避免创建自己的智能指针类,它会妨碍组合并降低可读性。作为最后的手段,请尝试查看 boost 或您的代码必须使用的任何框架。

如果您有非所有者,他们可以选择持有 weak_ptr 或(如果保证在持续时间内保持有效)原始指针。
如果您在内部使用 shared_ptr(为什么要这样做),最好提供 weak_ptr 和原始指针。

所有这些智能指针都明确表示所有权策略。原始指针表示无或不拥有。

  • auto_ptr:不要使用,即使是谨慎的人也已弃用太多陷阱。
  • unique_ptr:独资。
  • shared_ptr:共享所有权
  • weak_ptr:没有所有权,可能会在你背后被删除。
  • 原始指针
    • 明确无所有权,保证更长的生命周期
    • 或手动所有权管理。

关于用于资源管理的 C++ shared_ptr 与 unique_ptr,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23016854/

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