|
어째 이런 질문을 하남요
new는 동적 메모리할당
delete 동적 메모리 헤제
일반적으로 동적 메모리 생성이라고 하는데 할당(확보)입니다.
동적 메모리 삭제 라고 알고 있는데 헤제입니다.
우리가 new를 호출하면 윈도우의 커널이 비어있는 메모리중에서 적당한 부분을 확보(예약)해서 넘겨 줍니다..
이 넘겨주는 값이 new의 리턴 값입니다.
a= new int();
라고 하면 커널이 정수형 메모리를 확보(예약)하고 그 메모리의 번지를 리턴합니다. 이 리턴값이 new의 리턴 값이고 a에 저장되는 값입니다.
delete a 라고하면 new가 확보한 메모리를 헤제(예약 취소)하는것입니다. 다시 말해서 다른 프로그램에서 사용할 수 있게 메모리 영역이 필요없다고 커널에게 알리는 것입니다.
커널은 메모리 헤제 명령을 받으면 지정된 메모리를 다른 응용 프로그램에서 사용 할수 있는 상태로 만듭니다.
따라서 delete가 호출된 후에도 a에 NULL이 아닌값이 남아 있는것은 당연합니다.
그럼
열심 님이 쓰신 글 :
: 한 클래스에
: AA *a;
: 가 있습니다.
:
: 프로그램 중간에 잘 쓰다가 소멸자에서
:
: delete a;
: a = NULL; (0)
:
: 하였습니다.
:
: 그런데 그 이후로도 a 에 이상한 값이 남습니다.
: 그 이후 코딩에 보면
: if (a != NULL) ...
: 이런 부분이 있는데. 여길 넘질 못해서 에러가 납니다.
: 도대체 어째서 이런 일이 있는거지요?
: AA등 소멸자에서 뭘 잘못해서 그런가요?
: 아시는 분 자세한 설명 좀 부탁드립니다.
: 도와주시면 정말 감사하겠습니다. 꾸벅 ^^
|