Я прочитал несколько сообщений о временном времени жизни объекта. И одним словом, я узнаю, что:
временное уничтожается после окончания полного выражения, содержащего его.
Но этот код не в моих ожиданиях:
#include <memory>
#include <iostream>
void fun(std::shared_ptr<int> sp)
{
std::cout << "fun: sp.use_count() == " << sp.use_count() << '\n';
//I expect to get 2 not 1
}
int main()
{
fun(std::make_shared<int>(5));
}
Поэтому я думаю, что у меня есть 2 объекта интеллектуальных указателей, один из них - std::make_shared<int>(5)
, временный неназванный объект и другой sp
который является локальной переменной внутри функции. Поэтому, основываясь на моем понимании, временный не "умрет" до завершения вызова функции. Я ожидаю, что результат будет 2, а не 1. Что здесь не так?