2009-06-09 3 views
6

클래스를 정의하는 루비 확장을 쓰고 있습니다. Data_Wrap_Struct()을 사용하여 rb_define_alloc_func()에 대한 콜백을 구현하는 경우 수동으로 인스턴스 변수를 표시하고 해제해야합니까? 아니면 아직도 처리되는 거니?(U) Ruby 확장 : rb_gc_mark() 및 인스턴스 변수

답변

7

Ruby의 GC는 Ruby 객체의 인스턴스 변수에서 참조되는 Ruby 객체를 수집합니다. Ruby 인스턴스 변수를 직접 (즉, 확장에 rb_iv_set()/rb_iv_get()으로 액세스 한 모든 객체) 확보 할 필요가 없으며 그렇게해서는 안됩니다. 랩 C 구조체가 참조 루비 ​​객체 경우

그러나, 당신은 당신이 Data_Wrap_Struct()에 전달하는 mark 콜백 사람들을 표시해야합니다.

(그리고 당신은 항상 기본 구조체를 해제해야하고, 그러한 당신의 free 콜백 등 폐쇄 파일, 소켓, 필요에있을 수있는 다른 청소를 할 것입니다.)