C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 팁&트릭
C++Builder Programming Tip&Tricks
[434] 메모리 해제 간단히 하기~
utime.김성하 [utime] 7624 읽음    2004-08-04 17:49
뭐 다 아실지도 모르겠지만
저는 이렇게 씁니다.

걍 상위 Header 파일에

#ifndef DnFree
#define DnFree( f )  {\
                                if( f != NULL ) \
                                     delete f;\
                                f = NULL; \
                              }
#endif


사용하실 땐

ex)

  char * Buf = new char[1024];
  ...
  DnFree( Buf );

The End;

너무 쉬운건가?
김상면 [windyboy]   2004-08-05 06:34 X
너무 쉬운게 아니라
그렇게 하지말고
좀 까다로와도

if (f != NULL)
{      delete f;
        f = NULL;
}

로 사용하라고 가르치는 것 같더군요 아주 분명하고 확실한 경우외에는요

그롬
아담 [adamhan]   2004-08-05 10:10 X
delete f;
이렇게만 하면 가끔 if( f == NULL) 이  널이 아니다라고 나올때가있어 낭패
그래서 저도 꼭 f = NULL;사용.
그런데 위와같이해서 안되는거라도 있는지 차이가 있을까요?
김상구.패패루 [peperu]   2004-08-05 12:31 X
좀 오해를 하고 계신 것 같네요.
일단, delete할 때 변수에 NULL이 할당 된 경우에는 아무 오류없이 잘 됩니다.
따라서  if (f != NULL)은 아무 의미가 없습니다.

두번째, 저런 매크로를 안 쓰는 이유는 이미 예제에서 잘 보여주고 계시군요.
전형적으로 delete를 잘 못 쓴 예입니다. 저렇게 프리 하시면 큰일납니다.
char * Buf = new char[1024];
// delete Buf;  //<- 이렇게 하시면 안되죠
delete[] Buf; <- 이렇게 하셔야 합니다.

결론적으로.. 저렇게 쓰시면 아주 곤란합니다. 별 이득도 없구요.
아담 [adamhan]   2004-08-06 11:13 X
예제가 배열이었군요. 배열을 무심코 저런식으로 삭제할수도 이겠군요.
김상면 [windyboy]   2004-08-07 22:21 X
아항 또 배웠네요
패패루님의 말이 다음을 의미 한다면요.

char* a = NULL;

delete a;

가 아무 문제 없이 작동 한다면요
delete의 또다른 의미를 배운것 같습니다.
그럼
utime.김성하 [utime]   2004-08-08 02:03 X
아~ 배열은 고려치 않았네요~

가르침 감사합니다~ ^^
수야!╋ [sooya23]   2005-05-24 16:45 X
아.. 쇼킹해 -_-;
NULL인 값을 delete 해도 문제가 없네 -_-;;
여태까지 왜 -_-; 조건문을 걸었을까? ㅡ_ㅡ?
아.. -_-;; 혼돈이다..

+ -

관련 글 리스트
434 메모리 해제 간단히 하기~ utime.김성하 7624 2004/08/04
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.