【问题标题】:Return `std::shared_ptr` by reference通过引用返回 `std::shared_ptr`
【发布时间】:2019-06-13 16:35:23
【问题描述】:

我正在阅读一些代码库,但我不太明白为什么下面的函数会将reference (&) 返回到std::shared_ptr。我在this stackoverflow question 中读到我们应该按值返回std::shared_ptr,否则我们将无法正确增加引用计数。

所以我只是想猜测原因。

  • 是否与成员函数有关 static?或者返回值为static
  • thread有关系吗 顾名思义?谁能给我指点阅读或 给点方向?
class A {
    public:
        A() {...}
        ~A() {...}
        ...
        static std::shared_ptr<A>& ThreadLocal() {
            static std::shared_ptr<A> inst = std::make_shared<A>();
            if (inst == nullptr) {
                inst = std::make_shared<A>();
            }
            return inst;
        }
        static void Shutdown() {
            ThreadLocal().reset();
        }
    private:
        ...
}

【问题讨论】:

  • ThreadLocal 使用static 而不是thread_local?什么平分?
  • TBH 对我来说似乎有点可疑。
  • static 在声明中始终适用于被声明的名称。

标签: c++ c++11 return smart-pointers return-type


【解决方案1】:

它通过引用返回的原因之一是重置静态共享指针。您可以看到有一些逻辑可以为需要重置静态指针的任何业务逻辑创建一个新逻辑。

不,这里没有线程逻辑。

【讨论】:

  • 嗯,好点!我也质疑自己为什么要检查这一行:if (inst == nullptr)
  • 我想多花点时间深入研究一下代码,看看究竟是什么原因。但你的回答给了我一个很好的方向。
猜你喜欢
  • 1970-01-01
  • 2012-05-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-15
  • 2017-06-14
  • 1970-01-01
  • 2017-10-02
相关资源
最近更新 更多