Управление памятью в С++?
Понятия "мусор" в С++ нет, так как не должно быть безхозных обьектов, если такие появляются, это называется "утечкой памяти".
В С++ бывает 2 типа использования памяти.
1. На стеке. Такую память по особому выделять не нужно и освобождать тоже.
Пример:int a = 3;
2. В "куче". В этом случае уже вы отвечаете за выделение и освобождение памяти.
   Работает через оператор new. Или функции malloc, calloc и т.п.int* p = new int;
delete p;
Давай попробуем разобраться, что у тебя написано:
int a = 3;       // объявляем переменную типа int 
int *p = 0;     // объявляем указатель
p = &a        // записываем в указатель адрес переменной а
А теперь я предлагаю тебе прописать вот такие простые строчки, чтобы посмотреть что  у тебя там всё таки хранится:
cout << "Значение a=" << a << endl;   //значение a
cout << "Адрес &a=" << &a << endl;  //здесь адрес а
cout << "Значение p=" << p << endl;  //здесь адрес а
В твоем примере удалять ничего не нужно, это даже вызовет ошибку при компиляции, так как оператор delete используется в том случае, если память выделяешь ты динамически, используя ключевое слово new.
в твоем случае
int a = 3 // ты в памяти выделил 4 байта;
int *p = ты выделил (4 или 8 байта, на хранения адреса a, в зависимости от того, какая у тебя система 32-х или 64-х разрядная.
если ты объявляешь
int *p = new int  //ты в динамической памяти выделяешь размер для хранения int 
delete p //освобождаешь занятую ячейку в памяти.
Я сам новичок, и то что я тут написал, это моё понимание, очень хотел бы чтобы меня поправили.