Информация об изменениях

Сообщение Re: Время жизни временных объектов от 07.04.2021 20:46

Изменено 07.04.2021 21:02 rg45

Re: Время жизни временных объектов
Здравствуйте, 10000.monkeys, Вы писали:

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
https://en.cppreference.com/w/cpp/language/reference_initialization#Lifetime_of_a_temporary
Re: Время жизни временных объектов
Здравствуйте, 10000.monkeys, Вы писали:

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