2013-03-11 69 views
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); 
} 

回答

0

我會返回它,而不是傳入參數。我認爲一個shared_array只是複製指針,所以它很便宜,更好地陳述你在做什麼。無論如何,副本都應該被忽略。

+0

如果有人忘記將返回的shared_array賦值給一個變量會怎麼樣?然後在使用其關聯的內存之前將其解除分配。 – Baz 2013-03-11 15:06:01

+0

@Baz非常好的一點。你擁有'CContainer'嗎?爲什麼它需要一個指針而不是擁有它的數據? – 2013-03-11 15:07:07

+0

我擁有CContainer,並且應該釋放它的內存。我沒有編寫C接口... – Baz 2013-03-11 15:08:10