C++ 에는 Java, c#, python 과 같은 garbage collector이 없습니다. (따로 라이브러리를 사용하지 않는다면요!)
포인터에 동적 할당을 할때, 자연스럽게 공간을 반환해줄 수 있는 smart pointer을 구현해보겠습니다.
#include <iostream>
using namespace std;
template <typename T>
class smartptr {
private:
T* ptr;
public:
smartptr(T* p = 0) : ptr(p) {}
~smartptr() {
delete ptr;
}
T& operator*() { return *ptr;}
T& operator->() { return ptr;}
};
int main()
{
smartptr<int> ptr = new int;
*ptr = 4;
cout << *ptr;
}
요렇게 자동으로 클래스가 종료될 때 delete 연산자를 통해 동적할당을 반환하는 모습을 보여줍니다.
이는 smartpointer은 포인터가 아니라 객체이기 때문에 생성, 복사, 대입, 소멸의 모든 과정을 사용자가 제어할 수 있습니다.
위의 예는 소멸자에서 자동삭제 기능입니다.