2011/1/28 Culpian Camilo Martin <[email protected]>: > El vie, 28-01-2011 a las 14:46 +0100, Krzesimir Nowak escribió: >> 2011/1/28 Culpian Camilo Martin <[email protected]>: >> > ok, i'll try it, i have had some troubles doing this: >> > >> > class foo >> > { >> > static ref_ptr<foo> create >> > ( >> > return ref_ptr<foo>(new foo()); >> > ); >> > foo(); >> > ~foo(); >> > ref_ptr<foo> set_something() >> > { >> > //set something >> > >> > return ref_ptr<foo>(this); >> > //for using foo->set_something()->set_something(); >> > // oviously the ref_ptr delete "this", and cause a segfault >> > // any idea how can avoid this? >> > } >> > } >> >> Would be good to show what is this ref_ptr class... >> >> If the below code segfaults then maybe copy constructor of ref_ptr >> does not increment reference count. >> >> ref_ptr<foo> f = foo::create(); >> f->set_something()->set_something(); > > the problem is not when i do this: > > ref_ptr<foo> f = foo::create(); > f->set_something()->set_something(); > > the problem is when i do this: > > class foo_b : public foo > { > static ref_ptr<foo_b> create() > { > return ref_ptr<foo_b>(new foo_b()); > } > foo_b(); > ~foo_b(); > } > > when i do: > > foo_b foob = foo_b::create(); > foob->set_something(); //here ref_ptr delete the object member class > foo... this is what i can't do right.
Now I see. An option would be: 1. returning void instead of ref_ptr to this. 2. coding the reference count inside foo_b, instead of in ref_ptr. I would opt for first solution. _______________________________________________ gtkmm-list mailing list [email protected] http://mail.gnome.org/mailman/listinfo/gtkmm-list
