I am going to assume that this question relates to pointers in general, as that is what the quoted text in the question is explaining.
There are several reasons why you would want to use a smart pointer (or good old fashioned pointers in general). The first and most obvious one is that when you pass something by reference or by pointer, you pass the pointer to the item in memory, which means you get the actual object, instead of a copy, as you get when passing by value. This is useful when you want to manipulate an object using some function, or simply to reduce copying (imagine sending a large text file as a value all the time, that sure would be inefficient!)
Next, the opportunity of passing something as a null value. This basically means that the parameter can be passed in as a "does not exist" which in turn can be handled in logic. For instance, if a file pointer is null, a new file is created.
For smart pointers specifically: Smart pointers are pointers that have additional management algorithms going on behind the scenes, this could be reference counting or other options. For instance, you can use a unique_pointer to make sure that only one pointer to the object exists at any given time. For more information, see wikipedia http://en.wikipedia.org/wiki/Smart_pointer
If indeed the question is related to the workings of general pointers, please see also this introduction http://www.tech-recipes.com/rx/1232/c-pointers-pass-by-value-pass-by-reference/