2016-04-20 4 views
-1

Um ein Array von int s dynamisch zu erstellen, muss ich int *a = new int[20]; tun.Dynamische Zuordnung von Array von Objekten wie int

Gibt es eine ähnliche Möglichkeit, ein Array von Objekten oder Strukturen zu erstellen?

Zum Beispiel brauche ich eine dynamisch zugewiesene Array von Objekten class A, wie soll ich es erklären (Syntax)?

Welcher Konstruktor würde für jedes Objekt aufgerufen werden (wenn überhaupt irgendein Konstruktor aufgerufen wird)?

+1

Sie könnten 'A * a = neu A [20];', und der Standard-Ctor wird aufgerufen. – songyuanyao

+1

Kann ich 'std :: vector' anstelle von' new' Ausdruck empfehlen? –

+0

@NickyC Ich möchte verstehen, wie das funktionieren würde. Ich weiß, dass ich 'std :: vector' verwenden kann. Aber wie funktioniert es eigentlich? – ayushgp

Antwort

1

Sie können es tun, um diese Zeile mit:

A* a = new A[N]; 

Wie funktioniert es?

das Schlüsselwort new wird N sequenziellen Block im Heap zuordnen. Jeder Block hat eine Größe von sizeof(A), so dass die Gesamtgröße in Bytes N*sizeof(A) ist. Die Zuweisung dieser Objekte im Speicher erfolgt durch den Aufruf des Standardkonstruktors N.

Alternative:

Verwenden std::vector statt. Es wird die ganze Arbeit für dich erledigen.

2

Verwendung von Arrays mit Zeigern:

A* a = new A [20]; 

Ohne Zeiger

A a [20]; 

ich vorschlagen, Vektoren zu verwenden:

//init 
std::vector<A> aList; 

//reserve memory size - not necessary 
aList.reserve (20); 

//put elements in 
aList.push_back (A()); 

//access elements 
aList [0]; 
1

Syntax (C++):

Klassenname * classObject = new ClassName;

Zum Beispiel Nehmen wir an, eine Klasse namens Auto.

car *obj = new car;  

car *obj = new car[n]; // n objects will be created by calling the def. constructor