Вернуть `std :: shared_ptr` по ссылке - PullRequest
0 голосов
/ 19 января 2019

Я читаю некоторую кодовую базу, но я не совсем понимаю, почему приведенная ниже функция возвращает reference (&) в std::shared_ptr. Я прочитал в этот вопрос о стеке , что мы должны вернуть 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 голосов
/ 19 января 2019

Одной из причин, по которой он возвращается по ссылке, является сброс статического общего указателя. Вы можете видеть, что есть некоторая логика для создания новой для любой бизнес-логики, которую статический указатель может потребовать сброса.

И нет, здесь нет логики для потоков.

...