I am going to suggest that this question refers to pointers in general, as this explains the quoted text in the question.
There are several reasons why you would like to use a smart pointer (or the good old-fashioned pointers in general). The first and most obvious is that when you pass something by reference or pointer, you pass a pointer to an element in memory, which means that you get the actual object instead of the copy, as you get when passing by value. This is useful when you want to manipulate an object with a function or just cut back on copy (imagine you send a large text file as a value all the time, which would be inefficient!)
Next, the ability to pass something as a null value. This basically means that the parameter can be passed as "does not exist", which, in turn, can be processed in logic. For example, if the file pointer is NULL, a new file is created.
For smart pointers, in particular: Smart pointers are pointers that have additional control algorithms that go backstage, it can be reference counting or other parameters. For example, you can use unique_pointer to make sure that at the moment there is only one pointer to an object. For more information see Wikipedia http://en.wikipedia.org/wiki/Smart_pointer
If the question is really related to the work of shared pointers, see also this introduction http://www.tech-recipes.com/rx/1232/c-pointers-pass-by-value-pass-by-reference/
source share