Сообщение 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 до выхода из текущего блока:
Тогда как вот такое использование создает "битую ссылку":
И самое печальное то, что при помощи функций-членов нет возможности получить поведение, равноценное прямому доступу к члену-данному. Но если возвращаемый тип действительно имеет легковесное перемещение, то, возможно, имеет смысл вместо rvalue ссылок возвращать объект по значению. В этом случае появляется дополнительное перемещение, но становится меньше возможностей получения невалидных ссылок.
V>Пытаюсь окончательно разобраться с безопасным и быстрым возвратом тяжелых объектов. Правильно ли я понимаю принцип, или можно короче? Есть явные ляпы и ошибки?
Есть один нюансик.
Вот такое использование продлевает время жизни подобъекта m_some до выхода из текущего блока:
auto&& huge = carier{}.m_some;Тогда как вот такое использование создает "битую ссылку":
auto&& huge = carier{}.get_huge();И самое печальное то, что при помощи функций-членов нет возможности получить поведение, равноценное прямому доступу к члену-данному. Но если возвращаемый тип действительно имеет легковесное перемещение, то, возможно, имеет смысл вместо rvalue ссылок возвращать объект по значению. В этом случае появляется дополнительное перемещение, но становится меньше возможностей получения невалидных ссылок.
Re: Ref-qualified member functions
Здравствуйте, Videoman, Вы писали:
V>Пытаюсь окончательно разобраться с безопасным и быстрым возвратом тяжелых объектов. Правильно ли я понимаю принцип, или можно короче? Есть явные ляпы и ошибки?
Есть один нюансик.
Вот такое использование продлевает время жизни подобъекта m_some до выхода из текущего блока:
Тогда как вот такое использование создает "битую ссылку":
И самое печальное то, что при помощи функций-членов (геттеров) нет возможности получить поведение, равноценное прямому доступу к члену-данному. Но если возвращаемый тип действительно имеет легковесное перемещение, то, возможно, имеет смысл вместо rvalue ссылок возвращать объект по значению. В этом случае появляется дополнительное перемещение, но становится меньше возможностей получения невалидных ссылок.
V>Пытаюсь окончательно разобраться с безопасным и быстрым возвратом тяжелых объектов. Правильно ли я понимаю принцип, или можно короче? Есть явные ляпы и ошибки?
Есть один нюансик.
Вот такое использование продлевает время жизни подобъекта m_some до выхода из текущего блока:
auto&& huge = carier{}.m_some;Тогда как вот такое использование создает "битую ссылку":
auto&& huge = carier{}.get_huge();И самое печальное то, что при помощи функций-членов (геттеров) нет возможности получить поведение, равноценное прямому доступу к члену-данному. Но если возвращаемый тип действительно имеет легковесное перемещение, то, возможно, имеет смысл вместо rvalue ссылок возвращать объект по значению. В этом случае появляется дополнительное перемещение, но становится меньше возможностей получения невалидных ссылок.