FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
||||
|
||||
Duda con Inicialización de Array de Objetos
Hola amigos, estoy usando memoria dinamica y la obtengo bien pero lo que intento es poner toda esa memoria a 0 y lo hago usando memset.
Código PHP:
Luego he probado ha hacer esto: Código PHP:
|
#2
|
||||
|
||||
Se me olvidó poner la funcion donde libero toda esa memoria para que la veais y me digais si veis algo mal:
Código PHP:
|
#3
|
||||
|
||||
Hola aguml.
Una consulta, ¿ La variable rutas es un arreglo lineal o bidimensional ? Saludos
__________________
Daniel Didriksen Guía de estilo - Uso de las etiquetas - La otra guía de estilo .... |
#4
|
||||
|
||||
Estás mezclando C y C++. Recuerda que son lenguajes diferentes.
Lo siguiente: Código:
//Obtengo memoria para los elementos necesarios rutas = new(nothrow) AnsiString*[nSeleccionadas]; Por eso lo siguiente: Código:
//Limpio todo lo necesario memset(rutas, 0, sizeof(rutas)); memset no sabe de objetos, sólo sabe de posiciones de memoria. Y sizeof devuelve el tamaño del tipo, no el número de elementos de una lista (salvo que lo hayan cambiado en la definición del lenguaje C++ 99 o posterior, que si es así me parece una cagada monumental...). Estas dos funciones son funciones C, no C++. Para limpiar los objetos has de usar un bucle y limpiar cada objeto, uno a uno, de la forma apropiada, similar a tu código de liberación de memoria: Código:
int Ndx; for (Ndx = 0; Ndx < nSeleccionadas; Ndx++) *(rutas[Ndx]) = ""; // La clase AnsiString sobrecarga el operador "=". Última edición por Ñuño Martínez fecha: 16-12-2014 a las 15:40:25. Razón: Parece que tengo el C++ más oxidado de lo que pensaba. |
#5
|
||||
|
||||
Cita:
Código PHP:
Saludos
__________________
Daniel Didriksen Guía de estilo - Uso de las etiquetas - La otra guía de estilo .... |
#6
|
||||
|
||||
a ver si me se explicar. Ya se que no estoy creando ningun objeto, lo que quiero limpiar es la lista de punteros, justo despues los creo y el poner todos a 0 antes es para luego al liberar la memoria con un condicional compruebo si es o no 0 y solo libero los que no sean 0. En teoria no es necesario ya que "new (nothrow)" devuelve 0 si falla con lo que ya estaria a 0. En el caso del array de AnsiString tambien podria utilizar un TListString pero no se que seria mejor ya que lo uso para almacenar las rutas de unas imagenes para luego poder borrarlas al terminar. No se si un array como el que hago es mas eficiente o no que un TListString ni se como se usa el TListString.
|
#7
|
||||
|
||||
solo necesito una lista de AnsiStrings, no necesito mas dimensiones.
|
#8
|
||||
|
||||
en realidad todos son listas, unos de objetos, otros de strings. Supongo que para las strings podria utilizar TStringList y para el resto TList pero no se usarlos ni como gestionar cuando deuna excepcion por falta de memoria. Supongo que seria "try[ lista->Add("ruta"); ]catch(...)[ //mensaje de error ]". Perdonen por todo pero es que en el movil no me deja ni poner corchetes, ni saltos de lineas ni nada. Para un TList ¿Como seria? ¿Como creo cada objeto y como lo destruyo y libero memoria en ambos casos?
|
#9
|
||||
|
||||
Hola aguml.
Si deseas trabajar con un array dinámico de elementos tipo AnsiString la declaración, Código PHP:
Código PHP:
Código PHP:
Resultado: Saludos
__________________
Daniel Didriksen Guía de estilo - Uso de las etiquetas - La otra guía de estilo .... Última edición por ecfisa fecha: 16-12-2014 a las 17:36:37. |
#10
|
||||
|
||||
en tu codigo veo cosas que no entiendo. Por ejemplo, creas un puntero de tipo TStrings y luego le asignas un TStringList ¿Por que no creas un simple AnsiString y luego haces un Add con el TStringList? Por cierto, si creo AnsiString *rutas, cuando quiera guardar una ruta supongo que seria rutas[i] pero ¿Y si quiero por ejemplo leer un caracter de una ruta en concreto? ¿Seria rutas[i][j]?
|
#11
|
||||
|
||||
Hola aguml.
Cita:
Cita:
Código PHP:
Cita:
Código PHP:
__________________
Daniel Didriksen Guía de estilo - Uso de las etiquetas - La otra guía de estilo .... Última edición por ecfisa fecha: 16-12-2014 a las 23:53:45. |
#12
|
||||
|
||||
lo de rutas[i][j] me referia en el caso de hacerlo con un AnsiString *rutas. Otra cosa, he estado leyendo que TListString tiene el metodo Delete, Count, y Clear y que para eliminar todos los miembros de la lista habia que hacer "for(int i=Lista->Count-1; i>=0;i--) Lista->Delete(i); delete Lista; Lista = null;" pero tambien he leido que el metodo Clear limpia la lista y libera toda la memoria ocupada por los miembros de la lista. Veo que tu te limitas a eliminar la lista sin eliminar antes sus miembros. ¿Puedes aclararme esos puntos por favor?
|
#13
|
||||
|
||||
La clase TListString gestiona la memoria por sí mismo. Por ejemplo, el código de su destructor es más o menos:
Código:
~TListString () { this->Clear (); } |
#14
|
||||
|
||||
ok, lo de recorrer la lista y borrar uno a uno los miembros con el metodo delete lo vi en un ejemplo donde usaba AddObject para añadir objetos a la stringlist y supongo que será por eso y que al no tener objetos no hace falta. Supongo que para el TList que tambien tengo que usar para algunos objetos si tendre que usar su metodo delete y eliminar todos los objetos antes de destruir laTList ¿No?
|
#15
|
||||
|
||||
por cierto, ¿Que diferencia hay entre crear TStrings *lista = new TStringList; o crear TStringList *lista = new *TStringList? ¿Que ventajas y pegas puede haber entre usar uno u otro?
|
#16
|
||||
|
||||
Hola aguml.
La ventaja de usar una variable de clase abstracta es que dicha variable/parámetro puede recibir cualquier clase derivada de la anterior. Por ejemplo, Código PHP:
Código PHP:
En ejemplo anterior concretamente, no reporta beneficio ni perjuicio alguno. Pero, en el caso de haber necesitado del uso de la función miembro Sort(), hubiera usado: Código PHP:
Saludos
__________________
Daniel Didriksen Guía de estilo - Uso de las etiquetas - La otra guía de estilo .... |
#17
|
||||
|
||||
Hola aguml.
Cita:
Saludos
__________________
Daniel Didriksen Guía de estilo - Uso de las etiquetas - La otra guía de estilo .... |
#18
|
||||
|
||||
Hola aguml.
Me olvidé de ponerte un ejemplo con TList: Código PHP:
Saludos
__________________
Daniel Didriksen Guía de estilo - Uso de las etiquetas - La otra guía de estilo .... Última edición por ecfisa fecha: 17-12-2014 a las 18:25:50. |
#19
|
||||
|
||||
Entonces en mi caso mejor TObjectList. Tendré que ver como funciona esa.
|
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
Duda con inicialización de variables | lucasarts_18 | Varios | 13 | 04-11-2010 17:12:56 |
Duda sobre destrucción de objetos compuestos por otros objetos | noob | OOP | 11 | 16-02-2009 00:28:33 |
Recorrido por objetos en forma de array. | vpepen | Varios | 7 | 23-01-2009 13:11:12 |
Array de objetos propios? | gandalf_uy | OOP | 6 | 26-02-2008 04:19:48 |
Array de OBJETOS en Delphi 7 | animal | OOP | 5 | 08-07-2005 11:33:21 |
|