Implement WeakPointer.
shared_pointer.h -> smart_pointer.h