It is even more important if you use such techniques because how else would you know that the move you are about to prune is likely prunable without having examined it?
There's one more feature that I can recommend if you get around to null move pruning: in case you don't get a fail-high, you may get a move back. This is the threat move that your opponent would like to do if you didn't do anything about it. One recursion level further down from where you are now, this threat move should be ranked rather high because the threat move is likely to refute quite some of the moves on this level, i.e. because these moves don't address the threat.
And a general hint for the part when entering QS from main search: I don't check with "if (depth == 0)". That may bite you once you use reductions. Using "if (depth <= 0)" will spare a either some bug hunting or extra code to check whether the reduction falls straight into QS.