some advancements in shared_ptr implementation, still needs the non member function to be implemented