Allocate some storage space (like 9 indicies in an effect array) and then place a reference to each special effect into one of those indicies. After you are done with the special effects you can then itterate through all 9 special effects removing them one at a time.
A system using a hashtable for the memory allocation is also viable although slower and more coplicated than the array method.
you can add the destroy special effect directly after creating it, it will be destroyed after "playing". at least i think so.
so:
Not entirly true. You can only destroy special effects if the model the effect uses has no death animation. An example is an explosion where the animation will still finish even after the effect is destroyed. However destroying effects will run the model's death animation which may not produce the desired visual effects. Some WC3 models even have 0 length death animations meaning that destroying them immediatly causes them to never visually appear.
Creating an effect plays the effect model's birth animation.
After the virth animation completes, effects will play a variety of stand animation.
Destroying an effect will immediatly inturrpt any animation it is currently playing with the death animation.
Animations are skipped (and thus do not interupt) if the model lacks such an animation string.
A model with no birth animation will go immediatly into its stand animation.
A model with no stand animation will hang on the last frame of the birth animation.
A model with no death animation will dissapear completly once the current animation ends.
Effects only play animations when near the current projection matrix position (close to your view port).