Everyone is right, it depends. However, that doesn't really help you figure out whether or not you need to call delete, aside from someone or something telling you what the behavior is. I can think of a couple of ways to figure it out yourself:
1) In your debugger, break before the loop starts, then do a stop in whatever function allocates memory (eg malloc,mmap,brk) and see if it stops. Not fool proof alone, but you can try to step around to see the address returned and then check the address that is ultimately returned by the CMTGetPackingMapID function.
2) A less precise but simpler way to say 'is there allocation happening at all inside this function' is to use your sysems version of strace/ltrace. perhaps sleep right before the loop to make it easy to tell where you are in the trace.
3) Watch your system's equivalent of top to see if you are leeking
Note that C++ is an evil language and nothing can really tell you for sure except the code. For instance, there is nothing that prevents the actually correct behavior from being having to delete some member 10 levels deep inside the object you have a pointer to. Or even god forbid to have to free() it because actually the class calls malloc somewhere deep down in it's depths.