我是否必须释放使用 Cgo 创建的结构?

ans*_*elm 2 go cgo

我在 Go 代码中创建 C 结构体,如下所示:

var data C.MyStruct_t
Run Code Online (Sandbox Code Playgroud)

我是否必须在某个时候手动释放它们,就像使用 CString 时所做的那样?使用 CString 我经常做这样的事情:

ctitle := C.String(title)
defer C.free(unsafe.Pointer(&ctitle))
C.my_func(&ctitle)
Run Code Online (Sandbox Code Playgroud)

Jim*_*imB 5

不。您只能调用free通过 C 函数分配的内容*alloc。和函数被记录为在内部执行此操作C.CStringC.CBytes并且需要使用C.free.

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