Class Fly
{};
Class NoFly: public Fly
{};
Class YesFly: public Fly
{};
이렇게 되어 있다고 해 봅시다.
Fly* fly = new YesFly();
Fly* nofly = new NoFly();
fly에 nofly를 대입시킬 일이 생겼습니다. 어디서 읽어 보았는데 이럴 경우
delete fly;
Fly* fly = nofly;
이렇게 선언을 해 주는 게 좋다고 하더군요.
그런데 말이지요.
저렇게 선언이 되어있는 상태에서 다른 것을 대입한다고 한다면
그냥 fly = nofly; 해도 되는 거 아닌가요?
fly = nofly를 하면 컴파일러가 알아서 처리해 주지 않나 싶습니다.
int a = 5;
int b = 4;
a = b;
를 할 경우에도 별다른 거시기가 없으니 말이지요
..상위 것은 포인터라 다르나 하는 생각도 들긴 합니다만.. 전 후자가 옳다고 생각하고 있는데, 다른 분들은 어떻게 생각하시나 듣고 싶군요.
포인터는 주소 이외의 아무런 내용을 가지지 않습니다. 포인터를 덮어쓴다 해서 실제 있는 그 내용은 어떠한 영향도 받지 않습니다.
위의 저 fly = noFly 를 해주게 되면, 그때부터 걍 fly 는 NoFly 객체가 있는곳을 가리키게 되므로 사용상으로는 좀비님이 원하시는대로 동작하겠지만, new YesFly 때 생성된 실제 내용이 있는 메모리를 찾기 위한 어떠한 주소지는 외계로 날아가버립니다. 그리고 더이상 접근할 방법이 없게 됩니다.
곧, 메모리 해제시킬 방법이 없게 됩니다.