Version-1 : Basic shared pointer. Just does reference counting of the object on heap.
Version-2 : With Allocator and Deletor support.
Version-3 : Corrected constructor overloading and removed deletor support.
Version-4 : With weak reference count and weak_ptr.