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

Сообщение Re: Ref-qualified member functions от 31.05.2023 15:55

Изменено 31.05.2023 15:57 rg45

Re: Ref-qualified member functions
Здравствуйте, Videoman, Вы писали:

V>Пытаюсь окончательно разобраться с безопасным и быстрым возвратом тяжелых объектов. Правильно ли я понимаю принцип, или можно короче? Есть явные ляпы и ошибки?


Есть один нюансик.

Вот такое использование продлевает время жизни подобъекта m_some до выхода из текущего блока:
auto&& huge = carier{}.m_some;


Тогда как вот такое использование создает "битую ссылку":
auto&& huge = carier{}.get_huge();


И самое печальное то, что при помощи функций-членов нет возможности получить поведение, равноценное прямому доступу к члену-данному. Но если возвращаемый тип действительно имеет легковесное перемещение, то, возможно, имеет смысл вместо rvalue ссылок возвращать объект по значению. В этом случае появляется дополнительное перемещение, но становится меньше возможностей получения невалидных ссылок.
Re: Ref-qualified member functions
Здравствуйте, Videoman, Вы писали:

V>Пытаюсь окончательно разобраться с безопасным и быстрым возвратом тяжелых объектов. Правильно ли я понимаю принцип, или можно короче? Есть явные ляпы и ошибки?


Есть один нюансик.

Вот такое использование продлевает время жизни подобъекта m_some до выхода из текущего блока:
auto&& huge = carier{}.m_some;


Тогда как вот такое использование создает "битую ссылку":
auto&& huge = carier{}.get_huge();


И самое печальное то, что при помощи функций-членов (геттеров) нет возможности получить поведение, равноценное прямому доступу к члену-данному. Но если возвращаемый тип действительно имеет легковесное перемещение, то, возможно, имеет смысл вместо rvalue ссылок возвращать объект по значению. В этом случае появляется дополнительное перемещение, но становится меньше возможностей получения невалидных ссылок.