まつもと ゆきひろです

In message "[ruby-ext:01336] Re: Q about reference to another object"
    on 00/10/13, Masahiro Tanaka <masa / stars.gsfc.nasa.gov> writes:

|それでmarkの処理に時間がかかるからですね。
|ありがとうございます。

いや、面倒なのは人間にとってです。機械にやさしくする必要はな
いでしょう。

|途中で回収される危険性ということで考えたのは、
|前田さんの例をお借りすると、
|
|struct foo {
|    int count;
|    VALUE obj;
|};
|
|static void mark_foo(struct foo *f)
|{
|    rb_gc_mark(f->obj);
|}
|
|static VALUE foo_s_new(VALUE self)
|{
|    ...
|    f = ALLOC(struct foo);
|    f->obj = rb_str_new(...);
|    ...
|    /* GC 発生 */
|    ...
|    return Data_Wrap_Struct(cFoo, mark_foo, free_foo, f);
|}
|
|というコードでは、f->obj に割り当てたオブジェクトは
|/* GC 発生 */のところで回収されてしまうと思うのですが、
|そういう理解で正しいですか?

正しいです。気を付けて下さいませ。

                                まつもと ゆきひろ /:|)