TObject.Free
동적으로 생성한 오브젝트를 Free하면, 해당 객체에 할당되어 있던 메모리 공간을 OS로 돌려주게 된다. 그러나 오브젝트 변수가 가리키고 있던 포인터 값에는 여전히 기존 메모리의 주소가 존재하므로Nil을 할당하여야 포인터 값을 초기화 시킬 수 있다. 만약 Free한 오브젝트를 다시 사용하기 위해서는 Nil을 꼭 할당한 후, 다시 Create를 해야 한다.
Object := TObject.Create;
Object.Free;
Object := Nil;
TObject.FreeAndNil
동적으로 생성한 객체에 할당되어 있던 메모리 공간을 OS로 돌려주는 동시에 객체의 변수가 가리키고 있던 포인터의 값까지 초기화 해준다.
Object := TObject.Create;
FreeAndNil(Object);
TObject.Destroy
동적으로 생성된 객체에 할당되어 있던 메모리 공간을 OS로 돌려준다. Free함수와의 차이점은 Free는 해당 오브젝트가 메모리에 할당되었는지를 검사하는 것에 있다. Free 함수는 새당 오브젝트가 메모리에 할당되었는지를 검사한 후, 내부적으로 Destroy를 호출하여 메모리를 반환하는 반면, Destroy는 곧바로 메모리를 반환한다. 해당 오브젝트에 메모리가 할당되어 있지 않은 상태에서 Destroy함수를 호출하면 에러가 발생하게 된다. 따라서 일반적인 경우네는 Destroy를 직접 호출하는 것보다 Free를 호출할 것을 권장한다.
Object := TObject.Create;
Object.Destroy;
Object := Nil;
출처: http://tenlie10.tistory.com/82
--추가--
Free만 쓸경우 -> nil이 아닌 객체들을 전부 해제하는데 이 과정에서 nil로 초기화 되지 않는 놈이 생겨서 다시 Free를 시도하기 때문에 오류가 발생할수도 있다.
Free후에 Nil을 해주거나 FreeAndNil을 사용하자
'Lang > Delphi' 카테고리의 다른 글
Enter 이벤트 쉽게 적용하기 (0) | 2022.08.27 |
---|---|
TEdit SelectAll 동시 컨트롤 (0) | 2022.08.27 |
PostMessage로 자기자신 호출하기 (0) | 2022.08.27 |
델파이 Cafree (0) | 2022.08.27 |
edit 박스 속성 컨트롤 (0) | 2022.08.27 |