Los tipos de puntero inteligente son una capa de abstracción para automatizar el proceso de asignación y desasignación de memoria, su función constructora, obtiene una memoria asignada (mediante puntero) y su función de destructor libera la memoria asignada. Por supuesto, el constructor y el destructor pueden estar en línea (por lo tanto, no hay sobrecarga para llamarlos). Por ejemplo:
{
int* raw = new int(40);
auto_ptr<int> sp(raw); //inline constructor: internal_holder = raw
//...
//inline destructor: delete internal_holder
}
En C++ es bueno utilizar punteros indirectamente (ocultarlos detrás de las clases). La sobrecarga de crear un nuevo puntero inteligente es insignificante. Pero shared_ptr es más pesado debido a su comportamiento para el recuento de referencias (se hace referencia a la referencia).
Cuando queremos utilizar punteros sin procesar que se reciben de otras funciones que son escritas por otras personas, si estos punteros crudos no deberían ser liberados por nosotros mismos, entonces no deberíamos usar punteros inteligentes.
Un poco de búsqueda en este mismo sitio le da los siguientes http://stackoverflow.com/search?q=smart+pointers – celavek
Muchos diferentes posibles duplicados a esta pregunta ... –