首页 > 解决方案 > 通过引用返回 `std::shared_ptr`

问题描述

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

所以我只是想猜测原因。

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:
        ...
}

标签: c++c++11returnsmart-pointersreturn-type

解决方案


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

不,这里没有线程逻辑。


推荐阅读