Ok, so the last time I wrote C++ for a living, `std::auto_ptr` was all the std lib had available, and `boost::shared_ptr` was all the rage. I never really looked into the other smart pointer types boost provided. I understand that C++11 now provides some of the types boost came up with, but not all of them. 

So does someone have a simple algorithm to determine when to use which smart pointer? Preferably including advice regarding dumb pointers (raw pointers like `T*`) and the rest of the boost smart pointers. (Something like [this](https://stackoverflow.com/a/2139254/140719) would be great).