Передача буст-умных указателей по ссылке

Следующая функция преобразует Container что я использую в своем коде для того, который требуется интерфейсом c. Я должен пройти в boost::shared_array<CValues>& к этой функции, так как мне нужно сохранить связанную с ней память, пока я не использую cContainer. Есть ли лучший способ сделать это?

CContainer getCContainer(const Container& container, boost::shared_array<CValues>& values)
{
CContainer cContainer;
cContainer.type = boost::apply_visitor(CTypeGetter(), container);
cContainer.nrOfValues = boost::apply_visitor(ContainerSizeGetter(), container);
values = boost::shared_array<CValues>(new CValues[cContainer.nrOfValues]);
boost::apply_visitor(ValueSetter(values), container);
cContainer.values = values.get();
return cContainer;
}

void store(Container& container)
{
boost::shared_array<CValue> values;
CContainer cContainer = getCContainer(container, values);
cSave(cContainer);
}

0

Решение

Я бы вернул его вместо передачи параметра. Я предполагаю, что shared_array просто копирует указатели, так что это дешево и лучше показывает, что вы делаете. Копия должна быть удалена в любом случае.

0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector