AFAIU:

 

What makes the new smart pointer non-shared is that after checking the ptr_to_unique for validity, the code relies on it staying valid, instead of promoting it to the equivalent of a shared_ptr.

 

That only works well, if no called functions, no interrupt and no other thread and no callbacks - which some GUI frameworks love to call in response to a GUI API call - and no cooperative multitasking scheme (-> yield) delete the object.

 

So it uses a control block like shared_ptr, but uses raw pointers to access the pointer like those, which are used when calling a dependent function on unique_ptr without ownership transfer.

 

unique_ptr also relies on nobody deleting the object, when it calls a function with a derived raw pointer to the object.