#include <stdio.h>
#include <iostream>
using namespace std;
class Cat
{
private :
int color;
public :
virtual ~Cat() { cout << "destr" << endl; }
void Shout() { cout << "야옹" << endl; }
};
class Ptr
{
private :
Cat *p;
public :
~Ptr()
{
// 이것이 가능함.
//(*p).Shout();
delete p;
}
Ptr(Cat *Other)
{
p = Other;
}
Cat* operator->()
{
return p;
}
// 소멸자에서 호출한 것을 참고해서 만들자....
Cat& operator*()
{
return *p;
}
};
int main()
{
Ptr p = new Cat();
p->Shout();
(*p).Shout();
}
: 동적 할당한 자원을 알아서 해제하는 객체를 말함.
개념을 가지고 생각을 해보면,,,
1. 하나의 클래스 안에 포인터 객체를 구성하고, 소멸자에서 해제를 하면 됨.
2. 추가적으로 포인터 객체를 사용하기 위한 연산자 오버로딩을 구현하면 됨.