I have a SmartPtr class that implements reference counting and garbage collections. First of all, I am weary about it's completeness. Is there a complete SmartPtr class that acts exactly (or nearly) like a regular pointer available. Second, since threads each have their own stack, are smart pointers useful for multithreading? It seems to me that since threads share resources (heap, GDI, etc), the smart pointer would be ideal for multithreading memory management. Ultimately, I'm looking for a complete smart pointer and a good discussion (or book/article) on the various uses of smart pointers, including their applicability to multithreading.