Я обнаружил, что это работает хорошо, но я не знаю, безопасно ли это, потому что я не понимаю, почему это работает:
struct X{
static X& make(){
return *std::make_shared<X>();
}
...
}
int main(){
const auto& a = X::make();
a.function();
...
// seems like the instance holds and nothing broken
}
В моем понимании возвращенная ссылка на разыскиваемый объект изshared_ptr
operator*
не должно влиять на то, как shared_ptr
управляет счетчиком ссылок экземпляра: поэтому созданный экземпляр внутри make()
должен быть уничтожен после выполнения make()
.Но этот код кода работал хорошо много раз, и я не понимаю, почему.Так что я не уверен, сможем ли мы действительно сделать это таким образом ... благодарны за любые комментарии!