# Manage C-instance with GC

**URL:** <https://racket.discourse.group/t/manage-c-instance-with-gc/594>\
**Category:** Questions & Answers\
**Created:** [January 19, 2022, 6:02am UTC](https://racket.discourse.group/t/manage-c-instance-with-gc/594 "2022-01-19T06:02:50Z")\
**Posts on this page:** 2\
**Page:** 1

<div class="post-metadata">

**Author:** ![dannypsnl](https://yyz2.discourse-cdn.com/free1/user_avatar/racket.discourse.group/dannypsnl/32/917_2.png) [@dannypsnl](https://racket.discourse.group/u/dannypsnl)\
**Post date:** [January 19, 2022, 6:02am UTC](https://racket.discourse.group/t/manage-c-instance-with-gc/594/1 "2022-01-19T06:02:50Z")

</div>

One might get a C structure `A`, and its constructor `make_A()` and destructor `free_A(A*)`. In ffi, we can bind them by `ffi/unsafe`, but how to let GC handle A's instance and tell GC calls `free_A` when unused?

---

<div class="post-metadata">

**Author:** ![mflatt](https://yyz2.discourse-cdn.com/free1/user_avatar/racket.discourse.group/mflatt/32/6_2.png) [@mflatt](https://racket.discourse.group/u/mflatt)\
**Post date:** [January 19, 2022, 2:03pm UTC](https://racket.discourse.group/t/manage-c-instance-with-gc/594/2 "2022-01-19T14:03:37Z")

</div>

See [`ffi/unsafe/alloc`](https://docs.racket-lang.org/foreign/Allocation_and_Finalization.html).

For an example use, see [the libcairo bindings](https://github.com/racket/draw/blob/master/draw-lib/racket/draw/unsafe/cairo.rkt).
