Ima ih nekoliko vrsta i svi su šabloni, kojima se tip pokazivanog objekata prosleđuje kao parametar (npr. ato_ptr<int>).
1. auto_ptr
Obezbeđuje uništavanje objekata i prilikom kopiranja/dodele, pokazivač koji je dodeljivan dobija vrednost 0, tj. posle a=b je b==0. Koristi se kada ne može više od jednog pokazivača u isto vreme da pokatzuje na isti objekat.
2. intrusive_ptr
Obezbeđuje uništavanje objekata brojanjem referenci iako može više pokazivača da pokazuje na iosti objekat. Mana mu je da pokazivani objekat može biti konstruisan samo podrazumevanim konstruktorom ili konstruktorom kopije, osim ako je pravljen specijalno za jedan tip, pa ima još neke konstruktore. Takođe, mana mu je da ne sme imati kružnih referenci. To je situacija gde objekat a sadrži pokazivač koji pokazuje na objekat b, a objekat b sadrži pokaziovač koji pokazuje na a, s tim da situacija može biti i složenija (a pokazuje na b, b pokazuje na c, c pokazuje na d, a d pokazuje na a).
3. shared_ptr
Slično kao intrusive_ptr, ali se pokazivani objekat može konstruisati bilo kojim konstruktorom. Takođe, malo je manje efikasan od intrusive_ptr.
4. weak_ptr
Koristi se u kombinaciji sa shared_ptr za izbegavanje kružnih referenci. Nije primenljiv u kombinaciji sa intrusive_ptr.
5. unique_ptr
Naprednija zamena za auto_ptr. Jedina mana mu je da se može koristiti samo sa novijim kompajlerima koji podržavaju semantiku pomeranja (move semantic) iz najnovijeg standarda - C++11.
Nije bitno koji su zaključci izvučeni, već kako se do njih došlo.