(Consulta/C++11) Es posible inicializar un arreglo de objetos en la misma línea?

Iniciado por class_OpenGL, 14 Octubre 2017, 21:06 PM

0 Miembros y 1 Visitante están viendo este tema.

srWhiteSkull

A ver, ahi eso del initializer_list no lo estas usando, ya que todo lo que esta dentro de las llaves pasa por el primer constructor, y para que pasara al otro constructor el valor en vez de un entero tendria que ser algo contenido entre llaves... pero olvidate de esto. Tu codigo tal como lo tienes funciona bien, instancias el Objeto pero no correctamente, ya que de esa forma estas alojando los objetos en la pila de cabecera, un pequeño espacio reservado definido en el compilador para guardar variables estaticas. Lo recomendable es usar el new en un vector o hacerlo como te conté.

Te muestro un codigo para que lo comprendas, mira hacia donde apunta cada elemento:

Código (cpp) [Seleccionar]
#include <iostream>
//#include <initializer_list>

class Objeto {
private:
   int u;

public:
   Objeto(int n);
   //Objeto(const std::initializer_list<char> &n);
   void Imprimir();
};

int main() {
   Objeto cadenas[2] = {5, 9}; // estatico, en la pila
   Objeto *instanciao = new Objeto(666); // dinamico
   int y=8; // estatico, en la pila

   std::cout << &cadenas[0] << " " << &cadenas[1] << " " << &y << " " << instanciao << std::endl;

   for(int i = 0; i < 2; i++)
       cadenas[i].Imprimir();

   return 0;
}

Objeto::Objeto(int n) {
   std::cout << n << std::endl;

   u = n;
}

/*Objeto::Objeto(const std::initializer_list<char> &n) {
   std::initializer_list<char>::iterator it;

   std::cout << "Initializer (size = " << n.size() << "): ";
   for(it = n.begin(); it != n.end(); it++)
       std::cout << *it << ' ';
   std::cout << std::endl;


   u = 2;
}*/

void Objeto::Imprimir() {
   std::cout << u << std::endl;
}


Como habras observado el puntero instanciao apunta a un segmento diferente del resto  ;)

class_OpenGL

Si que se te está usando. Se usa cuando el número de elementos del vector es mayor que el número de elementos del initializer_list (aclarado con ejemplos y demostrado para mi compilador).

Programador aficionado. Me quiero centrar en programar videojuegos. La API que uso para crearlos es OpenGL