2017-04-03 3 views
1

ist, um einen Daten halten wieHat Boost intelligente Zeiger für einen Vektor von Arrays? Diese

double **a; 
a = new (double*)[100]; 
for (int i=0; i<100; ++i) { 
    a[i] = new double[99]; 
} 

Der ptr_vector kann einen Vektor von Zeigern umfassen. Aber es scheint nicht zu unterstützen benutzerdefinierte Löscher zu einem Array freizugeben.

Eine Lösung ist, dass ich eine neue Klasse erstellen kann, die 99 doubles verwaltet, und ptr_vector verwenden, um 100 der Klassen zu halten?

Antwort

2

Der beste Ansatz ist die Verwendung der Standardbibliothek. std::vector erspart Ihnen die Sorge um die Speicherverwaltung und die Größe des Vektors.

std::vector<std::vector<double>> a; 

Sie können auch std::unique_ptr verwenden, aber es ist mehr störend empfunden werden dynamische Speicher zuzuweisen. Da es sich jedoch um einen std :: unique_ptr handelt, handelt es sich um einen Smartpointer, wenn das Objekt den Bereich destruktiviert/aus dem Geltungsbereich ausloescht, wird der Speicher automatisch freigegeben.

std::unique_ptr<std::unique_ptr<double>[]> a(new std::unique_ptr<double>[100]); 
    for (i=0; i <100; i++) 
     a[i] = std::unique_ptr<int[]>(new int[99]); 

Die oben genannten Arbeiten, aber es besiegt die Absicht std::unique_ptr, die Sie zu speichern ist Zeiger verwenden und automatisch die Zuteilung und Speicher ausplanen.

Verwandte Themen