The reason of the memory leak is simple. You call a constructor for your string
Code:
   ::new((void*)pTmp)CString;  // call constructor
,but you never call a destructor (which, by the way, frees all memory, allocated in the CString constructor).

The statement
Code:
delete[] (BYTE*)pLabel ;
won't call any destructor for your objects.

Any way I think it's wrong. I can't even imagine a situation, when this code is useful.