델파이의 string 형은 문자열의 길이와 문자열에 대한 참조값을 같이 가지고 있습니다.
하나의 문자열을 다른 변수로 복사를 하게 되면, 문자열의 실제 데이터를 복사하는 것이 아니라,
원래 문자열에서 참조값을 1 증가시키고, 복사할 변수의 포인터도 원 문자열의을
가리키도록 하는 구조로 되어 있습니다.
예를 들면,
str1:='Hello Delphi...';
str2:=str1;
이런식으로 문자열을 복사하면, str1과 str2가 가리키는 문자열 주소는 같습니다.
대신 해당 주소의 참조 값이 2가 되어 있는 거죠.
이런 구조에서 문자열 변수에 nil을 넣는 다는 것은 참조수를 1 줄이는 것입니다.
그래서, 그 문자열에 대한 참조수가 0이되면 해당 문자열을 메모리에서 해제하게 되죠.
그래서 nil을 문자열이 사용하고 있는 메모리를 해제하는데 사용할 수 있는 것입니다.
덧붙여서, 위의 예에서, str2에 문자열을 조작하게 되면, 그 때서야 비로소 str2를 위한
메모리를 따로 할당하고 그곳에 str1의 실제 문자열을 복사한 후, 변경된 내용을 적용하게 됩니다.
그리고, str1의 참조수가 1 줄고, str2 변수의 참조수가 1이 되죠... ^^;
어떤 구문을 보니 var sa : array of String; begin SetLenth(sa, 33); sa[0] := '델파이'; OtherString := sa[0]; sa := nil //sa를 해제한다. 위에 구문은 무슨뜻이에여? nil이 값을 가지고 있지 않다는 그런 것이라서 sa변수의 메모리...
한원희
•
2002.08.26 23:19
안녕하세요. 한원희입니다.
델파이의 string 형은 문자열의 길이와 문자열에 대한 참조값을 같이 가지고...
델파이의 string 형은 문자열의 길이와 문자열에 대한 참조값을 같이 가지고 있습니다.
하나의 문자열을 다른 변수로 복사를 하게 되면, 문자열의 실제 데이터를 복사하는 것이 아니라,
원래 문자열에서 참조값을 1 증가시키고, 복사할 변수의 포인터도 원 문자열의을
가리키도록 하는 구조로 되어 있습니다.
예를 들면,
str1:='Hello Delphi...';
str2:=str1;
이런식으로 문자열을 복사하면, str1과 str2가 가리키는 문자열 주소는 같습니다.
대신 해당 주소의 참조 값이 2가 되어 있는 거죠.
이런 구조에서 문자열 변수에 nil을 넣는 다는 것은 참조수를 1 줄이는 것입니다.
그래서, 그 문자열에 대한 참조수가 0이되면 해당 문자열을 메모리에서 해제하게 되죠.
그래서 nil을 문자열이 사용하고 있는 메모리를 해제하는데 사용할 수 있는 것입니다.
덧붙여서, 위의 예에서, str2에 문자열을 조작하게 되면, 그 때서야 비로소 str2를 위한
메모리를 따로 할당하고 그곳에 str1의 실제 문자열을 복사한 후, 변경된 내용을 적용하게 됩니다.
그리고, str1의 참조수가 1 줄고, str2 변수의 참조수가 1이 되죠... ^^;
음.. 말로 풀어 쓰려니 어렵군요...
답변이 되었을지 모르겠네요... ^^;