Следующая функция преобразует 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);
}
Что делать, если кто-то забывает назначить возвращенный shared_array переменной? Затем он будет освобожден до использования связанной с ним памяти. – Baz
@Baz Очень хорошая точка. У вас есть 'CContainer'? Почему вместо указаний, а не собственных данных? –
Я владею CContainer и должен освободить его память. Я не написал интерфейс C ... – Baz