Для упрощения работы с кодом я написал небольшой класс, инкапсулирующий буфер и его размер (что-то вроде
NSData в Cocoa). Везде где нужно работать с буфером данных использую этот класс.
Проблема в том, что в коде встречаются места, где я напрямую (из стороннего API как правило) получаю буфер и его размер, а мне нужно передать эти данные в функцию, принимающую объекты моего класса-буфера. Сейчас для этих целей создаю временную переменную, которая враппит данные. Такой подход мне не нравится - использование временных объектов минимум требует вызова лишнего деструктора, что в моём случаи не особо нужно. Делать наборы методов для передачи инкапсулируемых данных напрямую тоже не охота.
Я слышал что есть подход, при котором мы создаём глобальные объекты, служащие для передачи оборачиваемых данных. Вопрос состоит в следующем: действительно ли используется такой подход и если да, то как его максимально корректно реализовать на С++?
Как я сейчас вижу такое решение
Тупое решение в лоб:
template< typename T_ObjectType >
T_ObjectType ®isterObject() {
static T_ObjectType sRegister;
return sRegister;
}
Тут будет огромное количество проблем. Минимум - это ужасно с точки зрения потокобезопасности.
П.С.: Семантика перемещения, как я понимаю, тоже не подходит. Во-первых, она вызов деструктора не отменяет. Во-вторых, я стараюсь писать без использования С++11 - для возможности использования библиотеки на старых компиляторах.
Заранее спасибо всем за ответ!