You method with GetCurrentCtrl, pointers and memory management is a bit not U++ enough for me.
A few years ago, I proposed to add a bit in Ctrl to allow a child Ctrl to be owned, which was rejected by Mirek. Then I found he used PtrBit or something like that (pointer as int, add 1 to signal an owned ctrl) in his ArrayCtrl to allow a child to be owned. If a Ctrl can be owned, we can rely on TabCtrl to delete it when needed, which will save some code and some 'ugly' delete. Otherwise it's an inevitable choice, unless you want to put up with the extra cost of an redundant Array just to hold the new'd Ctrls.
Anyway, it's a matter of taste/faith. Good thing is you make things work as you wish and the way you wish.