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

Сообщение Re[5]: Какая версия С++ ваша основная? от 13.01.2023 11:46

Изменено 13.01.2023 12:14 rg45

Re[5]: Какая версия С++ ваша основная?
Здравствуйте, Skorodum, Вы писали:

S>А можете привести пример кода, который вы могли бы у себя улучшить при поддержке mandatory copy/move elision? Подозреваю, что ручная оптимизация возвращаемой из функций памяти будет не нужна.


Mandatory copy/move elision здорово облегчают написание и улучшают качество разного рода создателей "сложных" объектов — парсеров, загрузчиков, фабрик и пр. Давай условно будем называвать такую процедуру "загрузчик". "Сложные" объекты, это, в первую очередь, такие объекты, которые имеют сложные связи с внешним миром и эти связи хочется заложить прямо на этапе конструирования объекта, чтобы исключить даже саму возможность существования невалидных объектов, даже временно. Также для таких объектов очень часто хочется запретить операции копирования/перемещения, а также конструктор по умолчанию. Также к сложным объектам можно отнести большие объекты с дорогой и сложной операцией копирования. Благодаря возможности mandatory copy/move elision загрузчик имеет возможность подготовить все необходимые данные, возможно, предварительно что-то подгрузить из BD и, наконец, создать сам объект и вернуть его по значению — даже при запрещенных конструкторах копирования и перемещения. Что при этом очень важно — загрузчик не навязывает внешнему миру способ владения объеком — верхняя логика сама решает, будет ли она владеть объектом через какой-то смарт-поинтер и через какой именно, либо просто создаст автоматический объект на стеке (в юнит-тесте, например).
Re[5]: Какая версия С++ ваша основная?
Здравствуйте, Skorodum, Вы писали:

S>А можете привести пример кода, который вы могли бы у себя улучшить при поддержке mandatory copy/move elision? Подозреваю, что ручная оптимизация возвращаемой из функций памяти будет не нужна.


Mandatory copy/move elision здорово облегчают написание и улучшают качество разного рода создателей "сложных" объектов — парсеров, загрузчиков, фабрик и пр. Давай условно будем называвать такую процедуру "загрузчик". "Сложные" объекты, это, в первую очередь, такие объекты, которые имеют сложные связи с внешним миром и эти связи хочется заложить прямо на этапе конструирования объекта, чтобы исключить даже саму возможность существования невалидных объектов, даже временно. Также для таких объектов очень часто хочется запретить операции копирования/перемещения, а также конструктор по умолчанию. Также к сложным объектам можно отнести большие объекты с дорогой и сложной операцией копирования. Благодаря возможности mandatory copy/move elision загрузчик имеет возможность подготовить все необходимые данные, возможно, предварительно что-то подгрузить из BD, поискать все необходимые связи в графе объектов и т.п. и, наконец, создать сам объект и вернуть его по значению — даже при запрещенных конструкторах копирования и перемещения. Что при этом очень важно — загрузчик не навязывает внешнему миру способ владения объеком — верхняя логика сама решает, будет ли она владеть объектом через какой-то смарт-поинтер и через какой именно, либо просто создаст автоматический объект на стеке (в юнит-тесте, например).