->연산자 오버로딩

ghoflvhxj의 이미지

template <typename T>
class SmartPointer
{
private:
	T *ptr;
public:
	SmartPointer(T *ptr) : ptr(ptr) {}
	~SmartPointer() 
        {
                if(ptr!=nullptr)
                       delete ptr; 
        }
	T& operator*() const
	{
		return *ptr;
	}
	T* operator->() const
	{
		return ptr;
	}
};
 
...
 
SmartPointer<Point> sptr1(new Point(0, 0));
 
(sptr1.operator->())->ShowPosition(); 
//sptr1->->ShowPosition() 구문오류 발생!
sptr1->ShowPosition();

위와 같이 스마트 포인터를 만들고 ->연산자를 오버로딩 사용을 할 때
sptr1->operator->()이 반환하는 것이 ptr이니까 주석처리 한 sptr1->->ShowPosition() 처럼 동작되야 할 거 같은데 구문오류가 발생하고 왜 sptr1->ShowPosition()이 맞는거죠?

글이 2개가 작성됬네요...? 삭제 버튼이 없어서 뻘줌하군요 껄껄