2017-01-23 6 views
1

Ich schaffe C structs in meinem Go-Code, wie folgt aus:Muss ich mit Cgo erstellte Strukturen freigeben?

var data C.MyStruct_t 

Muss ich sie irgendwann von Hand zu befreien haben, wie ich, wenn ich CString verwenden? Mit CString ich oft so etwas wie:

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

Antwort

3

Nein, Sie nur free auf etwas rufen, die über die C *alloc Funktionen zugeordnet wurde. Die Funktionen C.CString und C.CBytes sind intern dokumentiert und erfordern die Verwendung von C.free.

In diesem Fall, obwohl data vom Typ C.MyStruct_t ist es in Go zugeordnet ist, und wird daher von der Go-Garbage-Collector behandelt werden.

Verwandte Themen