Inicializar arrays de Objetos en C++

Jinku Hu 12 octubre 2023
  1. Utilice el operador new para inicializar un array de objetos con constructores parametrizados en C++
  2. Utilice la función std::vector::push_back para inicializar un array de objetos con constructores parametrizados
  3. Utilice la función std::vector::emplace_back para inicializar un array de objetos con constructores parametrizados
Inicializar arrays de Objetos en C++

Este artículo demostrará varios métodos para inicializar un array de objetos con constructores parametrizados en C++.

Utilice el operador new para inicializar un array de objetos con constructores parametrizados en C++

El operador new es parte de la interfaz de gestión de memoria dinámica de C++, y es equivalente a la función malloc del lenguaje C. Tenga en cuenta que la gestión de memoria dinámica implica el flujo en el que el usuario asigna la memoria de un tamaño fijo específico y la devuelve al sistema cuando ya no se necesita.

new se usa para solicitar el número fijo de bytes del sistema, que devuelve el puntero a la región de memoria si la llamada es exitosa. En el siguiente ejemplo, definimos una clase llamada Pair con dos constructores y printPair para enviar los miembros de datos a la consola. Al principio, necesitamos asignar un array de cuatro miembros de Pairs usando el operador new. A continuación, podemos atravesar el array con el bucle for, y cada iteración inicializa el elemento con el constructor parametrizado. Sin embargo, tenga en cuenta que el array asignada debe liberarse antes de que el programa salga utilizando el operador delete. Note también que la notación delete [] es necesaria para desasignar cada elemento del 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;
}

Producción :

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

Utilice la función std::vector::push_back para inicializar un array de objetos con constructores parametrizados

Alternativamente, un enfoque más autónomo sería almacenar los objetos en el contenedor std::vector, que proporcionaría la función incorporada para inicializar nuevos elementos dinámicamente. Es decir, la definición de Pair permanece igual, pero en cada iteración, llamaremos a la función push_back y le pasaremos el valor de Pair del segundo constructor. En el lado positivo, no tenemos que preocuparnos por la desasignación de los recursos de memoria; se limpian automáticamente.

#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;
}

Producción :

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

Utilice la función std::vector::emplace_back para inicializar un array de objetos con constructores parametrizados

Otro método para inicializar un array de objetos con constructores parametrizados es utilizar la función emplace_back de la clase std::vector. De esta forma, solo necesitamos pasar los valores del constructor Pair, y emplace_back construiría automáticamente un nuevo elemento para nosotros. Al igual que el método anterior, este tampoco necesita que el usuario se preocupe por la gestión de la 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;
}

Producción :

x: 0
y: 0
x: 2
y: 1
x: 4
y: 4
x: 6
y: 9
Autor: 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

Artículo relacionado - C++ Array