![]() |
![]() |
| Paypal | FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
|||||||
| Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Buscar | Temas de Hoy | Marcar Foros Como Leídos |
![]() |
|
|
Herramientas | Buscar en Tema | Desplegado |
|
|
|
#1
|
||||
|
||||
|
Es interesante, y supongo que puede hacerse con cualquier objeto de la clase TPersistent. Para objetos en general, el problema no está tanto con las propiedades, como dije arriba, puesto que si se copia toda la imagen del objeto en memoria, tal como hace ecfisa, supongo que también se copiarán los campos privados y, en general, el estado del objeto desde el cual se leen las propiedades. Pero el problema son las referencias; subobjetos, cadenas, etc.
Este tema lo tiene dominado Al González, según entiendo. En este hilo menciona que algun vez resolvió ese problema y menciona cuáles son los puntos a tomar en cuenta. No es trabajo fácil. // Saludos |
|
#2
|
||||
|
||||
|
Cita:
Y en ella pareciera que campos, propiedades y eventos son conservados mediante la llamada a Clone. Sin embargo no sé por qué, pienso que se me está escapando algo... Saludos. ![]()
__________________
Daniel Didriksen Guía de estilo - Uso de las etiquetas - La otra guía de estilo .... |
|
#3
|
||||
|
||||
|
Pero, por ejemplo, si haces:
Es decir, c2.Cadena y c1.Cadena hacen referencia a la misma cadena. En un clonación, el objeto clonado debería ser inicialmente igual al original en todo aspecto pero cambios posteriores no deberían afectar al otro. Lo mismo sucedería si tu objeto tuviera otros objetos como propiedades. Por otra parte, un string lleva un conteo de referencia que, me parece, se alteraría con una asignación usando Move. Es decir, habría dos variables apuntando a la misma cadea pero con un conteo de referencia igual a 1. Haz la prueba:
Y ni qué decir de interfaces, que también llevan un conteo de referencias. // Saludos |
|
#4
|
||||
|
||||
|
Hola roman.
Quedó aclarado lo que se me estaba escapando ![]() Saludos. ![]()
__________________
Daniel Didriksen Guía de estilo - Uso de las etiquetas - La otra guía de estilo .... |
|
#5
|
||||
|
||||
|
Por ahí vi que nuestro amigo Al estaba respondiendo a este hilo
Con seguridad tiene algo interesante que decir .// Saludos |
|
#6
|
||||
|
||||
|
Cita:
![]() Esa referencia de 2004 me hizo recordar que tardé muchos años en salir de la adolescencia . Aunque ya desde entonces planteaba cosas raras .Cita:
Claro está que algo así debe tratarse con sumo cuidado, por las razones antes mencionadas. Última edición por Al González fecha: 31-10-2012 a las 21:26:28. Razón: Responder a pregunta |
|
#7
|
||||
|
||||
|
Cita:
. Seguramente recordarás que los dos primeros parámetros de Move no son punteros a los buffers origen y destino, sino los buffers en sí (parámetros sin tipo). Es decir, de esa forma está copiando el puntero Self sobre el puntero Result (igual que una sentencia "Result := Self") y "SizeOf(Self)" devuelve el tamaño de un puntero: 4 bytes (u 8 en ejecutables de 64 bits).Ambas direcciones de memoria pueden ser "desreferidas" (¿está bien escrito, Ñuño? ) y usar el método InstanceSize en lugar de la función SizeOf, a fin de conseguir con Move la copia que se quiere. Pero, se atraviesan algunos problemas:
El primer punto se resuelve mediante las funciones _CopyRecord y _CopyObject (aunque ésta última parece estar incompleta y sólo llamar a _CopyRecord). Pero el resto de los puntos son quizá la razón de por qué la clonación de bajo nivel es un tema relegado a la alquimia. ![]() De ahí que hoy, cuando deseo realizar alguna clonación de objetos, me limito a crear un objeto de la misma clase al cual copio sólo las propiedades publicadas, disponibles mediante reflexión (RTTI), y evitando aquellas que pudieran causar algún conflicto. Saludos. |
|
#8
|
||||
|
||||
|
Cita:
// Saludos |
|
#9
|
||||
|
||||
|
Hola Al.
Te estoy muy agradecido (al igual que a roman) por ampliar la explicación del motivo y documentarlo claramente paso a paso. ![]() Un tema interesante y que nunca se me cruzó para abordarlo. (Y para que la idea no acumule polvo encima, me pondré a investigar y probar sobre ella) Saludos ![]()
__________________
Daniel Didriksen Guía de estilo - Uso de las etiquetas - La otra guía de estilo .... |
![]() |
| Herramientas | Buscar en Tema |
| Desplegado | |
|
|
Temas Similares
|
||||
| Tema | Autor | Foro | Respuestas | Último mensaje |
| Diferencia entre versiones | FunBit | MySQL | 2 | 18-01-2007 09:45:47 |
| Diferencia entre Delphi | emeritos | Varios | 1 | 18-11-2006 17:19:50 |
| Diferencia entre Consultas | santi33a | MS SQL Server | 1 | 08-11-2005 08:19:22 |
| Diferencia entre .GDB y .FDB | CarlosHernandez | Firebird e Interbase | 3 | 14-09-2005 04:08:49 |
| Diferencia entre fechas.... | seb@ | OOP | 1 | 21-08-2003 15:57:22 |
|