2009-03-16 5 views
1

Liebe Grüße. Ich brauche hier etwas Erfahrung, wie man mit dynamischen Arrays mit Objects umgehen kann.Arrays beim Ausgleichen von Objekten duplizieren

Ich habe eine Klasse 'SA', bestehend aus mehreren Objekten 'Obj1', 'Obj2' etc ...

Innerhalb der Klasse I ein dynamisches Array 'SA_Array' haben, die ich in der folgenden Weise initialisieren wo Größe setzt seine Länge:

double * SA_Array; 
SA_Array = new double [size]; 

Jetzt habe ich versucht, die ‚=‘ Bediener auf die obigen Aufgaben zu verwenden Kopien des Arrays in jedem Objekt zu machen. Leider habe ich erkannt, dass es nur den Zeiger ausgleicht und daher, wenn ich das Array in einem Objekt verändere, werden alle Objekt SA_Arrays gleich modifiziert ... Im Wesentlichen belasse ich mit nur einer Kopie auf dem Array.

z.B. Obj1.SA_Array == Obj2.SA_Array ...

Gibt es irgendwelche guten Vorschläge, wie dies zu überwinden und objektspezifische Kopien von SA_Array zu erreichen?

Antwort

3

Wenn die Größe zur Laufzeit bestimmt wird, am einfachsten zu verwenden, ist ein Vektor

vector<double> SA_Array(size); 

Jetzt können Sie kopieren, tauschen, ändern Sie die Größe und es wird entsprechend handeln. Wenn Sie einen Zeiger auf den Anfang benötigen, können Sie das mit &SA_Array[0] tun. Wenn die Größe bestimmt wird und bei der Kompilierung festgelegt, können Sie boost :: array

boost::array<double, size> SA_Array; 

Sie können es verwenden, wie ein Array verwenden, sondern auch kopieren und tun Sachen wie SA_Array.begin() wie mit dem Vektor. Wenn Sie einen Zeiger auf den Anfang benötigen, können Sie dies mit SA_Array.data() oder &SA_Array[0] tun.

Es ist der Weg, um rohe Zeiger zu verwenden wie Sie haben, und kopieren Sie es manuell

double *SA_Array; 
SA_Array = new double[size]; 

double *SA_Copy; 
SA_Copy = new double[size]; 
std::copy(SA_Array, SA_Array + size, SA_Copy); 

Aber es ist mühsam, da Sie delete[] sie müssen sich daran zu erinnern, was ein Vektor alles für Sie tun.

0

Verwenden Sie entweder eine Standardbibliotheksauflistung, z. B. std::vector<double>, oder, in seltenen Fällen, in denen Sie Raw-Arrays benötigen, können Sie einen Kopierkonstruktor schreiben und auf Ausnahmesicherheit achten.

Verwandte Themen