Well, a memory leak occurs when you lose reference to it.
Take for example a man holding two sticks, one in each hand. He has a box of sticks right next to him. Those sticks represent groups. At the moment, he has access to both of the sticks in his hands. However, if he drops a stick, he will no longer be able to access it. Also, if he grabs a
new stick in replacement of the old, the old one will drop and he won't have access to it anymore.
That was a very weird example, yes, but hopefully it will make things clearer. Once you don't have any variables that point to a group anymore, it is just "lost in memory". You can't go back and destroy it because no variable points to it.
So to answer your question:
as long as i dont set the group again before destroying it, it wont leak?
Yep. The reason why we destroy things is:
1) If we are going to change what a variable points to (a.k.a. what it "contains"), we will want to destroy whatever it currently points to so that it won't randomly float in memory.
2) If we no longer need that specific group or location or whatever, then there is no point in it being left in memory, right? Therefore, we can just destroy it and get on with our lives.
do you have to set = null any variable that you destroy for it to not leak?
No, that is for "local" variables which you will most likely not need to pay much mind to unless you use JASS. All the variables you create through the variable editor are "globals" and not subject to the glitch/bug that local variables have.
Let me know if that didn't explain it well enough, or if you are still confused. =)