UsUwasz elementy z listy, ale nie usuwasz samych obiektów. Druga rzecz, że ten rodzaj pętli nie jest właściwy do tej operacji. Tak bym to zrobił:
auto it = lista.begin();
while(it != lista.end())
{
if ((*it)->marka.compare(nazwa) == 0)
{
delete *it;
it = lista.erase(it);
}
else ++it;
}
albo:
lista.remove_if( [&nazwa](Pojazd *p)
{
if(p->marka.compare(nazwa) == 0) { delete p; return true; }
return false;
} );