There is also a performance penalty. That translates into much slower execution because it increases the chances of memory being swapping out to disk. It deletes the object once there are no more references to it. It can be used with existing code. Programs that don t do low-level stuff can be written exclusively using this pointer.
Native pointers don t have to be used at all.
Native pointers can be converted into smart pointers via a special construct. It should be easy to search for this construct using grep since it is unsafe. It should have zero dereferencing overhead and minimal manipulation overhead. It shouldn t have problems with circular references. Simply have a smart pointer that is made out of two native pointers.