Нет со всем по другому. По простому в с++ если обьект выходит из поля видимости, то вызывается его деструктор, в деструкторе умного указателя происходит какраз и delete указателя которым он владеет.
можно сделать например так:
void main(){
A *a = new A();// A - какойто класс
//.... тут чтото делаем
delete a;// а вдруг у нас несколько точек выхода из функции, или там где мы чтото делали мы бросили исключение, все , утечка, попадос
}
2ой вариант:
void main(){
scoped_ptr<A> a(new A());
//.... тут чтото делаем
// и опа нигде не нада руками удалять обьект - ПРОФИТ!
}
Это на случай если у нас локальный временный указатель который мы некуда не отдаем и его нельзя копировать, в других случаях чаще всего используется укзаатели со счетчиком ссылок, например shared_ptr, в нем еще хранится количество ссылок на данный обьект, и когда оноравно 0, только тогда delete делаем.
Это в двух словах без кучи ньюансов, вот шаред_птр можно с натяжкой чтото типа сборщика мусора как в джава назвать.