I have been using the shared_ptr from "smart_ptr.hpp" and have found it very useful.  However, I am afraid to try using the shared_array from the same file.  The problem is that shared_array does not have a size() member function.  This makes it very dangerous to use the shared_array if the user doesn't know what size array it was created with, for instance if it was returned from a function. 
 
   I think the shared_array would be much more useful with a size() member.  However,  this would necessitate changing the constructor and the reset() function to take an extra parameter to indicate the size.  Also, it would necessitate using a third pointer to store the size. 
 
Joe Gottman