Quick A: To be able to know when to delete the control block.
Recently on SO:
Why shared_ptr's reference counting object needs to keep track of the number of weak_ptrs pointing to the object too?
std::weak_ptrrefers to the control block to know if the object still exists and if so, to provide a
std::shared_ptrto it when needed. For that reason, the control block must exist as long as either a
std::shared_ptrexists. You need to track the number of instances of
std::weak_ptrto know when the last one is destroyed, just like for