Сообщение Re: Время жизни временных объектов от 07.04.2021 20:46
Изменено 07.04.2021 21:08 rg45
Re: Время жизни временных объектов
Здравствуйте, 10000.monkeys, Вы писали:
1M>
1M> Где заканчивается полное выражение для временной строки?
В области видимости функции construct.
1M> В этом случае не работает расширение жизни объекта на который ссылается константная ссылка (работает но ссылка умирает по дороге)?
В этом случае не работает, потому что ссылка — нестатический член класса и при данном способе инициализации этой ссылки продление времени жизни не выполняется.
1M> Где доходчиво можно прочитать про временные объекты и их время жизни?
https://en.cppreference.com/w/cpp/language/lifetime#Temporary_object_lifetime
https://en.cppreference.com/w/cpp/language/reference_initialization#Lifetime_of_a_temporary
1M>
1M>#include <string>
1M>#include <iostream>
1M>struct test
1M>{
1M> test(const std::string& s) : s(s) {}
1M> const std::string& s;
1M>};
1M>std::unique_ptr<test> construct(const char* s)
1M>{
1M> return std::make_unique<test>(s);
1M>}
1M>void print(std::unique_ptr<test> t)
1M>{
1M> std::cout << t->s.c_str();
1M>}
1M>int main(int argc, char* argv[])
1M>{
1M> print(construct("TEST"));
1M> return 0;
1M>}
1M>
1M> Где заканчивается полное выражение для временной строки?
В области видимости функции construct.
1M> В этом случае не работает расширение жизни объекта на который ссылается константная ссылка (работает но ссылка умирает по дороге)?
В этом случае не работает, потому что ссылка — нестатический член класса и при данном способе инициализации этой ссылки продление времени жизни не выполняется.
1M> Где доходчиво можно прочитать про временные объекты и их время жизни?
https://en.cppreference.com/w/cpp/language/lifetime#Temporary_object_lifetime
https://en.cppreference.com/w/cpp/language/reference_initialization#Lifetime_of_a_temporary
Re: Время жизни временных объектов
Здравствуйте, 10000.monkeys, Вы писали:
1M>
1M> Где заканчивается полное выражение для временной строки?
Это выражение под оператором return в функции construct.
1M> В этом случае не работает расширение жизни объекта на который ссылается константная ссылка (работает но ссылка умирает по дороге)?
В этом случае не работает, потому что ссылка — нестатический член класса и при данном способе инициализации этой ссылки продление времени жизни не выполняется.
1M> Где доходчиво можно прочитать про временные объекты и их время жизни?
https://en.cppreference.com/w/cpp/language/lifetime#Temporary_object_lifetime
https://en.cppreference.com/w/cpp/language/reference_initialization#Lifetime_of_a_temporary
1M>
1M>#include <string>
1M>#include <iostream>
1M>struct test
1M>{
1M> test(const std::string& s) : s(s) {}
1M> const std::string& s;
1M>};
1M>std::unique_ptr<test> construct(const char* s)
1M>{
1M> return std::make_unique<test>(s);
1M>}
1M>void print(std::unique_ptr<test> t)
1M>{
1M> std::cout << t->s.c_str();
1M>}
1M>int main(int argc, char* argv[])
1M>{
1M> print(construct("TEST"));
1M> return 0;
1M>}
1M>
1M> Где заканчивается полное выражение для временной строки?
Это выражение под оператором return в функции construct.
1M> В этом случае не работает расширение жизни объекта на который ссылается константная ссылка (работает но ссылка умирает по дороге)?
В этом случае не работает, потому что ссылка — нестатический член класса и при данном способе инициализации этой ссылки продление времени жизни не выполняется.
1M> Где доходчиво можно прочитать про временные объекты и их время жизни?
https://en.cppreference.com/w/cpp/language/lifetime#Temporary_object_lifetime
https://en.cppreference.com/w/cpp/language/reference_initialization#Lifetime_of_a_temporary