Есть несколько случаев, когда возвращение структуры по значению противопоказано:
1) Библиотечная функция, которая возвращает данные «токена», которые должны быть позже использованы в других вызовах, например.дескриптор потока файла или сокета.Возврат полной структуры нарушил бы инкапсуляцию библиотеки.
2) Структуры, содержащие буферы данных переменной длины, где структура была изменена с учетом абсолютного максимального размера данных, но где средний размер данных намного меньшенапримерструктура сетевого буфера, в конце которой находятся dataLen int и char data [65536].
3) Большие структуры любого типа, где стоимость копирования данных становится значительной, например:
a) Когда структура должна быть возвращена через несколько вызовов функций - многократное копирование одних и тех же данных.
b) Когда структура впоследствии ставится в очередь в другие потоки - широкие очереди означают более длительную блокировкураз во время копирования / копирования и, следовательно, повышается вероятность конфликта.Это и размер структуры накладывается на стеки потоков как производителя, так и потребителя.
c) Где структура часто перемещается между слоями, например.стек протоколов.
4) Где структуры различного def.должны храниться в любом массиве / списке / очереди / стеке / whatContainer.
Я подозреваю, что я настолько испорчен с ++ и другими ОО-языками, что я склонен к неправильному поиску / обновлению почти всего, что не может быть сохранено внативный тип
Rgds, Martin