There is a lot to consider if we want to implement a shared_ptr from scratch, but we can break it down into basic constructors, copy sematics, move sematics and eventually destructor to make it easier.
Let's follow the following structure and see how to do it.
Firstly we can just add the basic members and constructors: