For all but a very few circumstances (kernel development, embedded systems, intricately threaded code), you should *always* use a smart pointer when dealing with pointers. By a smart pointer, I mean...