2017-01-23 3 views
1

Я создаю C Структуры в моем коде Go, как это:Должен ли я освобождать структуры, созданные с помощью Cgo?

var data C.MyStruct_t 

ли я, чтобы освободить их вручную в какой-то момент, как я делаю, когда я использую CString? С CString я часто делаю что-то вроде:

ctitle := C.String(title) 
defer C.free(unsafe.Pointer(&ctitle)) 
C.my_func(&ctitle) 

ответ

3

No. Вы только назвать free на то, что было выделено с помощью C *alloc функций. Функции и C.CBytes задокументированы как внутренние и требуют использования C.free.

В этом случае, хотя data имеет тип C.MyStruct_t, он выделяется в Go, и поэтому он будет обрабатываться сборщиком мусора Go.

Смежные вопросы