There are projects, which use custom smart pointer(s). For majority of the projects, it is not an option to switch to boost::shared_ptr. The solution contains source code and comprehensive unit test for the problem.
All files contain comments, which describe what and why was done.
smart_ptrs.zip
Easy extending guide
User defined “smart pointer” class