C++のdelete[]の挙動について質問です。

int* p = new int[5];
int* q = new int[10];

int* z=p;p=q;q=z; //ポインタの交換

delete[] p; //どこまで開放されるのか?
delete[] q; //どこまで開放されるのか?

これ、メモリリークが起きたり、
逆に、開放しちゃいけない場所まで
開放されたりしないでしょうか?