gpt4 book ai didi

c++ - shared_ptr - 从包含的对象中访问

转载 作者:行者123 更新时间:2023-12-02 10:23:43 24 4
gpt4 key购买 nike

环境

  • Ubuntu x64 操作系统
  • C++

  • 用例
  • SomeObj是一个以多线程方式访问的类,并且只有在所有相关线程都关闭后才应进行清理
  • SomeObj正在控制其关联线程的生命周期
  • SomeObj在所有关联线程正常终止之前被破坏可能导致“段错误”,当任何线程试图访问被破坏的 SomeObj
  • 为了避免这种情况,要管理一个 ref 计数,这样 obj 就不会被破坏,只要它的 ref 计数大于零,这样,每个线程在其生命周期内都持有一个 obj 的 ref,因此,只有当它的 ref 达到零时,obj 才会从内存中删除(自杀)。
  • 这种方法保证 obj 只会在其所有关联线程终止后才会死亡,并且不需要等待的 obj(例如 std::mutex)

  • 考虑实现
  • 使用 std::shared_ptr 管理 obj 生命周期
  • std::shared_ptr已经维护了对象
  • 的引用计数
  • shared_ptr由外部代码
  • 维护
  • 给定 std::shared_ptr<SomeObj> , 如果只有 SomeObj可以访问 shared_ptr ref count 然后可以用来引用它的每个关联线程......或者,换句话说,如果 SomeObj本来可以持有 std::shared_pt<this>对于每个相关联的线程。

  • 手头的问题

    给定 std::shared_ptr<SomeObj> , 可以 SomeObj访问由 std::shared_ptr<SomeObj> 维护的 ref ,或者,持有例如。 std::shared_ptr<this> ?

    最佳答案

    改变 igel:

    @NadavRub Are you aware of std::enable_shared_from_this?



    纳达鲁布:

    Thanks @alterigel, this is exactly what I need.

    关于c++ - shared_ptr - 从包含的对象中访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56431981/

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