Все правы, это зависит. Тем не менее, это не поможет вам понять, нужно ли вам вызывать delete, кроме кого-то или чего-то, что говорит вам, каково это поведение. Я могу придумать пару способов понять это самостоятельно:
1) В вашем отладчике прервитесь перед началом цикла, затем остановите любую функцию, выделяющую память (например, malloc, mmap, brk), и посмотрите, остановится ли она. Это не просто доказательство, но вы можете попытаться обойти возвращаемый адрес и проверить адрес, который в конечном итоге возвращается функцией CMTGetPackingMapID.
2) Менее точный, но более простой способ сказать «происходит ли выделение вообще внутри этой функции» - это использовать вашу версию системы strace / ltrace. возможно, спать прямо перед циклом, чтобы было легко определить, где вы находитесь на трассе.
3) Наблюдайте за эквивалентом вершины вашей системы, чтобы увидеть, если вы лукавите
Обратите внимание, что C ++ - это злой язык, и ничто не может сказать вам наверняка, кроме кода. Например, нет ничего, что мешало бы фактически правильному поведению удалять некоторые элементы уровня 10 глубоко внутри объекта, на который у вас есть указатель. Или даже не дай бог освободить его (), потому что на самом деле класс вызывает malloc где-то глубоко в его глубинах.