C++11 provide weak_ptr for NOT sharing shared_ptr with other ref-counted pointer. Here is basic idea about how to implement it:
+--------------> T object <-----------------------+
+ +
T*ptr T*ptr
+---------------+ ref +-----------------+ ref +---------------------+
| WeakReference | +----> | Flag (ref count)| <-----+ WeakReferenceOwner |
+---+-----------+ +----------+------+ +------+--------------+
| ^ |
| +---------------------+
| | Invalidate: when last WeakReferenceOwner
| | deleted or owner want to invalidate object.
| |
+-------------------------------+
Check Flag validate before access object
The basic idea is we create class (WeakReference/WeakReferenceOwner) which share a ref-count flag which will indicate whether the reference object is still valid. Whenever you want to access the T* object, WeakReference will first check flag first, and return NULL if flag is invalid. This method could prevent leak large memory usage if the real T* object is large because only a small flag is shared.