2017-01-23 51 views
1

我在Go代码创建C结构,像这样:我必须使用Cgo创建的免费结构吗?

var data C.MyStruct_t 

我一定要在某个时候手动释放他们,像我这样做,当我用CString的?随着CString的我经常做这样的事情:

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

回答

3

不可以,你只能在被通过C *alloc功能分配什么叫freeC.CStringC.CBytes函数被记录为在内部执行,并要求使用C.free

在这种情况下,即使data的类型为C.MyStruct_t它也会在Go中分配,因此将由Go垃圾收集器处理。