0
以下函數將我在代碼中使用的Container
轉換爲c接口所需的Container
。我必須將boost::shared_array<CValues>&
傳遞給此函數,因爲我需要保持其關聯的內存直到我使用cContainer。有沒有更好的方法來做到這一點?通過引用傳遞boost智能指針
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 2013-03-11 15:06:01
@Baz非常好的一點。你擁有'CContainer'嗎?爲什麼它需要一個指針而不是擁有它的數據? – 2013-03-11 15:07:07
我擁有CContainer,並且應該釋放它的內存。我沒有編寫C接口... – Baz 2013-03-11 15:08:10