Cpp Circular Reference Smart Pointer