c++ - 通过引用返回 `std::shared_ptr`

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

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

所以我只是想猜测原因。

  • 是否与成员函数有关 静态?或者返回值是 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:
        ...
}

最佳答案

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

不,这里没有线程逻辑。

关于c++ - 通过引用返回 `std::shared_ptr`,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54270454/

相关文章:

Java - 返回一个整数数组

c++ - 如何使用资源获取即初始化来实现构建器模式?

c++函数将time_t格式化为std::string:缓冲区长度?

recursion - 递归 lambda 的开销

c++ - 是否存在连续存储的 HashMap 数据结构?

c++ - 向类添加仅移动类型会使该类成为仅移动类型?

c# - 将列添加到另一个表并作为列表返回 C#

JavaScript - Console.log 返回一些内容,但返回时显示未定义

c++ - C++ 中的 'and' 和 '&' 有什么区别?

c++ - 允许对单个值进行隐式转换