Inicializar arrays de Objetos en C++
-
Utilice el operador
new
para inicializar un array de objetos con constructores parametrizados en C++ -
Utilice la función
std::vector::push_back
para inicializar un array de objetos con constructores parametrizados -
Utilice la función
std::vector::emplace_back
para inicializar un array de objetos con constructores parametrizados
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
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