Inizializza array di oggetti in C++

Jinku Hu 12 ottobre 2023
  1. Usa il new operatore per inizializzare array di oggetti con costruttori parametrizzati in C++
  2. Usa la funzione std::vector::push_back per inizializzare array di oggetti con costruttori parametrizzati
  3. Usa la funzione std::vector::emplace_back per inizializzare array di oggetti con costruttori parametrizzati
Inizializza array di oggetti in C++

Questo articolo illustrerà più metodi sull’inizializzazione di una matrice di oggetti con costruttori parametrizzati in C++.

Usa il new operatore per inizializzare array di oggetti con costruttori parametrizzati in C++

L’operatore new fa parte dell’interfaccia di gestione dinamica della memoria C++, ed è equivalente alla funzione malloc del linguaggio C. Si noti che la gestione dinamica della memoria implica il flusso in cui l’utente alloca la memoria di una dimensione fissa specificata e la restituisce al sistema quando non è più necessaria.

new è usato per richiedere il numero fisso di byte dal sistema, che restituisce il puntatore alla regione di memoria se la chiamata ha successo. Nell’esempio seguente, abbiamo definito una classe denominata Pair con due costruttori e printPair per inviare in output i membri dati alla console. All’inizio, dobbiamo allocare un array di quattro membri di Pairs usando l’operatore new. Successivamente, possiamo attraversare l’array con il cicli for e ogni iterazione inizializza l’elemento con il costruttore parametrizzato. Ricorda però che l’array allocato dovrebbe essere liberato prima che il programma esca usando l’operatore delete. Notare anche che la notazione delete [] è necessaria per deallocare ogni elemento dell’array.

#include <iostream>
#include <vector>

using std::cin;
using std::cout;
using std::endl;
using std::string;
using std::vector;

class Pair {
  int x, y;

 public:
  Pair() = default;
  Pair(int a, int b) : x(a), y(b) {}

  void printPair() const { cout << "x: " << x << endl << "y: " << y << endl; }
};
int main() {
  Pair *arr = new Pair[4];

  for (int i = 0; i < 4; ++i) {
    arr[i] = Pair(i * 2, i * i);
  }

  for (int i = 0; i < 4; ++i) {
    arr[i].printPair();
  }

  delete[] arr;
  return EXIT_SUCCESS;
}

Produzione:

x: 0
y: 0
x: 2
y: 1
x: 4
y: 4
x: 6
y: 9

Usa la funzione std::vector::push_back per inizializzare array di oggetti con costruttori parametrizzati

In alternativa, un approccio più headless sarebbe quello di memorizzare gli oggetti nel contenitore std::vector, che fornirebbe la funzione incorporata per inizializzare dinamicamente nuovi elementi. Vale a dire, la definizione Pair rimane la stessa, ma ad ogni iterazione, chiameremo la funzione push_back e passeremo il valore Pair dal secondo costruttore. Tra i lati positivi, non dobbiamo preoccuparci della deallocazione delle risorse di memoria; vengono ripuliti automaticamente.

#include <iostream>
#include <vector>

using std::cin;
using std::cout;
using std::endl;
using std::string;
using std::vector;

class Pair {
  int x, y;

 public:
  Pair() = default;
  Pair(int a, int b) : x(a), y(b) {}

  void printPair() const { cout << "x: " << x << endl << "y: " << y << endl; }
};
int main() {
  vector<Pair> array;

  for (int i = 0; i < 4; ++i) {
    array.push_back(Pair(i * 2, i * i));
  }

  for (const auto &item : array) {
    item.printPair();
  }

  return EXIT_SUCCESS;
}

Produzione:

x: 0
y: 0
x: 2
y: 1
x: 4
y: 4
x: 6
y: 9

Usa la funzione std::vector::emplace_back per inizializzare array di oggetti con costruttori parametrizzati

Un altro metodo per inizializzare un array di oggetti con costruttori parametrizzati consiste nell’utilizzare la funzione emplace_back della classe std::vector. In questo modo, dobbiamo solo passare i valori del costruttore Pair e emplace_back costruirà automaticamente un nuovo elemento per noi. Come il metodo precedente, anche questo non richiede che l’utente si preoccupi della gestione della memoria.

#include <iostream>
#include <vector>

using std::cin;
using std::cout;
using std::endl;
using std::string;
using std::vector;

class Pair {
  int x, y;

 public:
  Pair() = default;
  Pair(int a, int b) : x(a), y(b) {}

  void printPair() const { cout << "x: " << x << endl << "y: " << y << endl; }
};
int main() {
  vector<Pair> array;

  for (int i = 0; i < 4; ++i) {
    array.emplace_back(i * 2, i * i);
  }

  for (const auto &item : array) {
    item.printPair();
  }

  return EXIT_SUCCESS;
}

Produzione:

x: 0
y: 0
x: 2
y: 1
x: 4
y: 4
x: 6
y: 9
Autore: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.

LinkedIn Facebook

Articolo correlato - C++ Array