La clase server debe tener un atributo de tipo Vector, y dentro de ese vector almacenas, por ejemplo, punteros a objetos LD (recuerda hacer delete al puntero de un objeto LD si vas a borrarlo del Vector, ya que aunque borres el puntero el objeto sigue existiendo y ocupa memoria).Efectivamente, pero te olvidas de que de esta forma también defines un máximo de elementos de forma estática que no puedes modificar a menos que recompiles el programa. Y también que tu método es más rápido que el mío, pero presenta el inconveniente anteriormente mencionado. ¡No se puede tener todo, amigos! B)
Cita de: "emuller"La clase server debe tener un atributo de tipo Vector, y dentro de ese vector almacenas, por ejemplo, punteros a objetos LD (recuerda hacer delete al puntero de un objeto LD si vas a borrarlo del Vector, ya que aunque borres el puntero el objeto sigue existiendo y ocupa memoria).Efectivamente, pero te olvidas de que de esta forma también defines un máximo de elementos de forma estática que no puedes modificar a menos que recompiles el programa. Y también que tu método es más rápido que el mío, pero presenta el inconveniente anteriormente mencionado. ¡No se puede tener todo, amigos! B)
con vector me refería a la clase "vector" de la STL al que pareceAh, disculpa la confusión. Pero yo siempre defiendo el HTM (Hazlo Tú Mismo), creo que se aprende más y además se tiene más control sobre qué se está haciendo realmente. Aunque tampoco hay que reinventar la rueda :)
... yo siempre defiendo el HTM (Hazlo Tú Mismo), creo que se aprende más y además se tiene más control sobre qué se está haciendo realmente...
pLD= new LD;Puntero a 1 objeto de clase LD
pLD= new LD[];Puntero a vector de objetos de clase LD
si bien creo un objeto LD luego en el main lo uso como si fuera un vector de objetos LDSi vas a usar un vector, declara un vector. Si no, pues con un objeto te vale.
de todas formas al declararlo LD[] es un vector de cuantos elementos??En C y en C++ los vectores son simplemente un puntero al inicio de los datos, del resto se tiene que ocupar el programador, ya que C no distingue entre un puntero y un vector. En tu caso omites el número de elementos, por tanto no se reserva memoria para el vector. Si declararas por ejemplo LD[10] pues se resevaría memoria de antemano para 10 elementos sin tener que usar new(). Pero si es LD[], entonces vas a tener que reservar la memoria manualmente.
declaro a mi puntero LD *pLD;, en el constructor de server lo inicializo asi: pLD= new LD[];,Bueno, como ya te he dicho, es tontería hacerlo así. Con new LD[] lo que haces es crear un puntero a un vector sin elementos, ni siquiera reservas la memoria para ellos (puesto que no has indicado cuántos son. Con new LD tampoco se reserva la memoria del vector, sino un solo objeto. Con new LD[c] sí reservarías espacio para c objetos de clase LD, por ejemplo.
despues lo uso como si fuera un vector, le agrego todos los objetos LD que quiero desde algun metodo de server, pero como sabe el compilador que dimension darle?Como ya te dije, no tiene dimensión. Para poder agregarle objetos de forma segura (para que el sistema operativo no te borre tus datos o no generes excepciones de violación de memoria), primero debes reservar la memoria. Es lo que estás haciendo mal aquí:
pero asi, previamente tengo que declarar a pLD con dimensiones fijas, no puedo agreegarle elementos de forma dinamica.¿Te da algún error el compilador o qué? Ponlo por favor.
lo voy a hacer en forma estatica definiendo un vector en vez de un puntero y dandole una dimension fija,Bueno, como ya te dije, un vector es un puntero. Lo que no termino de entender es que pLD[c].a=c; te funcione a secas y cuando le añadas pLD[c] = new LD; te dé problemas.