
[snip] If Foo is on the stack, is Foo::next pushed on current collector's stack? If std::vector<Foo> is on the stack, are all it's contained Foo::next's pushed on the current collector's stack?
I was going to reply with a 'no' (i.e. if Foo is on the stack then Foo::next is not pushed in the current collector's stack), when I realized the many problems that will be created by that. So I went and redesigned the library, and now the following are possible: 1) declaring garbage-collected objects either on the heap or on the stack. 2) declaring garbage-collected arrays either on the heap or on the stack. 3) allocating garbage-collected arrays of objects (not pointers of objects, arrays of objects). 4) having garbage-collected pointers point to members of garbage-collected objects that are not pointers. In other words, the following is possible: class bar : public object { }; class foo : public object { ptr<foo> next; bar bar1; }; ptr<foo> foo1 = new foo; ptr<foo> foo2 = new foo[10]; ptr<foo> foo3[10]; foo3[5] = foo2 + 3; ptr<ptr<foo> > ptr1 = new ptr<foo>; *ptr1 = foo3[5]; foo1->next = new foo[10]; ptr1 = new ptr<foo>[10]; ptr<bar> bar1 = &foo1->bar1; Now coding is similar to normal c++ coding but with these exceptions: a) the programmer needs to use 'ptr' or 'weak_ptr' class either as a member or a stack pointer. b) garbage collected objects should inherit from 'object'. The collector provides per memory block policies for managing finalization and marking. I have posted the new implementation in the vault, under memory; the library is complete except for weak_ptr (but the infrastructure is completed, and adding weak_ptr is easy). As always, discussion and analysis are welcomed. Achilleas