평소 포인터에 대해 헷갈리고 있었는데,
이 예제를 본 후 delete의 기능에 대해 이해할 수 있었다.
#include<iostream>
using namespace std;
class Person {
public:
virtual void Walk() {
cout<< "걷는 중입니다."<< endl;
}
};
class Student : public Person
{
public:
void Walk() {
cout <<"뛰는 중입니다." << endl;
}
};
int main()
{
Person* ptr = new Person();
ptr -> Walk();
delete ptr;
ptr = new Student();
ptr -> Walk();
delete ptr;
return 0;
}
student 클래스가 person클래스를 상속받는 상황이다.
main함수에서 객체 포인터 ptr는 person클래스를 가리킨다.
그 후 person클래스의 walk()함수를 실행시킨 후,
delete ptr; 을 실행한다.
여기서 포인터 ptr을 다시 Student * ptr이나
Person * ptr 선언을 안 해주고
ptr=new Student();로 student를 참조하는 부분이
아리송했었다.
헷갈린 부분은 delete ptr;에서 ptr도 함께 지워지는게
아닌가? 라는 생각이 들었던 것인데,
답은 아니다.
delete ptr;을 실행하면 ptr이 가리키는 객체를
삭제하는 것이지 ptr이 삭제되는 게 아니다.