Ver Mensaje Individual
  #5  
Antiguo 07-09-2020
Avatar de Al González
[Al González] Al González is offline
In .pas since 1991
 
Registrado: may 2003
Posts: 5.604
Reputación: 29
Al González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en bruto
Cita:
Empezado por ElKurgan Ver Mensaje
A partir de la versión 2009 de Delphi, los antiguos String son ahora AnsiString, y los antiguos WideString son los actuales String. Lo mismo pasa con PChar y PAnsiChar. Todo ello con vistas a soportar Unicode
Me siento obligado a enmendar una pequeña parte de tu respuesta, ElKurgan. Qué gusto leerte nuevamente, por cierto.

WideString sigue siendo único en su diseño y comportamiento. Ciertamente es Unicode como el String actual, y el valor de ambos se representa como una matriz (array) unidimensional de WideChars. Pero tienen una diferencia importante:

Código Delphi [-]
String1 := String2;
hace que String1 apunte a la misma dirección de memoria que String2, sin copiar realmente ningún carácter. Solo se incrementa en 1 el contador de referencias de la cadena, un pequeño campo numérico interno que indica cuántas variables String están apuntando al mismo contenido. String (o UnicodeString) es un tipo de dato eficiente y ágil para tratar con cadenas de caracteres.

Mientras que
Código Delphi [-]
WideString1 := WideString2;
realmente crea una copia del valor de WideString2, de tal manera que resulta en dos cadenas con los mismos caracteres, y por lógica en un mayor consumo de memoria. A diferencia de String, WideString no usa un contador de referencias. Este tipo de dato es apropiado para usarlo con interfaces COM, donde las cadenas expuestas por la interfaz (en forma de propiedades) o recibidas por la misma (en forma de parámetros) no emplean un contador de referencias.
Responder Con Cita