通过引用返回`std :: shared_ptr`

时间:2019-01-19 19:07:52

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

我正在阅读一些代码库,但是我不太明白为什么下面的函数会向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:
        ...
}

1 个答案:

答案 0 :(得分:2)

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

不,这里没有线程逻辑。