Destructors: In native programming, destructors are the part of a program that clean up the left-up/unused data from the computer memory.
Garbage: Is the left up data that remains after executing an operation
GC: Garbage Collector, a substitute for destructors in managed languages, they automatically do the same job in a bit different manner
Back to reality, destructors are pretty much the same as their cyber context. I'll set up some example scenarios:
You remember you once had this delicious fabulous fruit when you were a kid that you don't realy remember its name, this memory sticks up into your mind for years, then you happen to see the very same fruit again, but it doesn't taste as good, in fact it doesn't taste good at all.
You remember your favorite childhood teacher, her image is so pretty in ur head, you happen to see her once after the so many years and she's as ugly as death and as typical as a coin.
You once had this beautiful sweet love that lasted for years with that very picky lover that only sees beauty in you, and you got out of that era with a bag full of sweet lovely memories, years pass by and you somehow spot ur ex in the middle of an orgy let's say. You may then cynically laugh
and so on
Here's the thing, we tend to exaggerate and overrate the value of those left up data in our memory -the garbage-, we love to keep up our memories, although usually there's no real value for this, the events that formed them had already contributed their share in forming who you are as well, and sometimes reminiscing them would only cause hurt and depression.
I used to admire this song long ago, but sometimes when you see the truth and know that what matters isn't or was never really there and what you always thought to be true is actually another pack of garbage in your head then you learn, to never really appreciate memories.
The moral of the whole thing is to use destructors right on time - which is exactly after any event occurs and leaves memories behind, delete all the left up garbage.. stay clean :)