2016-04-09 4 views
2

Ich verwende ein boost :: multi_array, um einige Daten zu speichern. Ich mache meine ganze Arbeit an den Daten mit Ansichten, weil ich mit Datenscheiben in verschiedenen Dimensionen arbeiten muss.boost :: multi_array Speicherverwaltung und Gültigkeitsbereich

Meine Frage ist, wie wird das Gedächtnis von boost :: multi_array verwaltet?

Insbesondere möchte ich mit einer Kopie einer Scheibe (Ansicht) meiner Daten arbeiten. Daher würde Ich mag so etwas tun:

typedef boost::multi_array<double, 2> MyContainer; 
typedef MyContainer::array_view<1>::type Slice1D; 

Slice1D copy(const Slice1D & slice) 
{ 
    MyContainer copyMemory(slice); 
    Slice1D sliceCopy = copyMemory[boost::indices[0][range()]]; 
    return sliceCopy; 
} 

void main() 
{ 
    ... 
    Slice1D copySlice = copy(mySlice); 
} 

Ich mag würde wissen, ob dies falsch ist, weil die multi_array die Kopie enthält den Gültigkeitsbereich verlässt, wenn die Kopierfunktion zurückkehrt. Oder ist es in Ordnung, weil multi_array Smartpointer oder Referenzzählung verwendet, um den Überblick zu behalten?

Antwort

1

multi_array besitzt den Speicher.

array_view tut nicht besitzen den Speicher.

Es gibt keine Eigentumsrechte.

Ihr Code wird nicht gut funktionieren.