Я программирую с помощью Swift 2.2 на Mac OS X 10.11. У меня есть функция, которая выглядит следующим образом:Swift UnsafeMutablePointer распределение памяти и освобождение в функции
func aFunction(direntPointer: UnsafePointer<dirent>, usingBuffer bufPointer: UnsafeMutablePointer<CChar>) {
let tempBuf = UnsafeMutablePointer<CChar>.alloc(2048)
... [put the filename from the dirent into tempBuf and do some processing]
// Transfer the data in the temporary buffer into the provided buffer
bufPointer.moveAssignFrom(tempBuf, count: 2048)
// Seems necessary, but destroys the data in bufPointer as well
tempBuf.dealloc(2048)
return
}
bufPointer настроенное в вызывающей функции, как:
let bufPointer = UnsafeMutablePointer<CChar>.alloc(2048)
После возвращения к вызывающей программе, bufPointer не содержит действительные данные. Однако, если я удаляю вызов метода tempBuf.dealloc(), то tempBuf содержит допустимую память, и процедура работает, как и ожидалось. Согласно литературе, метод moveAssignFrom() более эффективно разрушает исходную память, делая отдельный move(), а затем destroy().
Мой вопрос в том, нужен ли вызов метода dealloc(), чтобы избежать утечки памяти или если это не имеет значения, потому что оно создается в стеке и просто уничтожается при возврате? В литературе Apple говорится, что выделенная память должна быть освобождена, но я не могу вернуть достоверные данные, если она освобождена.
Возможно, есть лучший способ сделать это? Цель вызова функции заключается в консолидации кода, чтобы избежать повторения его, потому что он вызывается из нескольких мест и обрабатывает имя файла, которое извлекается из dirent.
Спасибо