KnowledgeHub
Questions
Tags
Users
Search
Alex Rivera
|
Logout
Edit Question
Title
Body
I have simple base and derived class that I want both have shared_from_this() . This simple solution: class foo : public enable_shared_from_this<foo> { void foo_do_it() { cout<<"foo::do_it\n"; } public: virtual function<void()> get_callback() { return boost::bind(&foo::foo_do_it,shared_from_this()); } virtual ~foo() {}; }; class bar1 : public foo , public enable_shared_from_this<bar1> { using enable_shared_from_this<bar1>::shared_from_this; void bar1_do_it() { cout<<"foo::do_it\n"; } public: virtual function<void()> get_callback() { return boost::bind(&bar1::bar1_do_it,shared_from_this()); } }; Causes exception tr1::bad_weak_ptr in following code: shared_ptr<foo> ptr(shared_ptr<foo>(new bar1)); function<void()> f=ptr->get_callback(); f(); So after "googling" I have found following solution: class bar2 : public foo { void bar2_do_it() { cout<<"foo::do_it\n"; } shared_ptr<bar2> shared_from_this() { return boost::static_pointer_cast<bar2>(foo::shared_from_this()); } public: virtual function<void()> get_callback() { return boost::bind(&bar2::bar2_do_it,shared_from_this()); } }; And now it works. Is there any better and more convinient and correct way to enable_shared_from_this for both parent and child? Thanks
Tags (comma-separated)
Save Edits
Cancel