2013-03-11 3 views
0

Следующая функция преобразует 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

Что делать, если кто-то забывает назначить возвращенный shared_array переменной? Затем он будет освобожден до использования связанной с ним памяти. – Baz

+0

@Baz Очень хорошая точка. У вас есть 'CContainer'? Почему вместо указаний, а не собственных данных? –

+0

Я владею CContainer и должен освободить его память. Я не написал интерфейс C ... – Baz

Смежные вопросы