2011-12-16 3 views
1

コールバックインターフェイスからコンストラクタのコールバック基本クラスshared_ptrを継承する3番目のクラスに継承した派生クラスからshared_from_this()を渡そうとしたときに、weak_ptr例外に問題があります。なぜこれは機能しませんか?以下の簡略化されたテストケースを参照少なくとも一つのshared_ptrが最初に存在しなければならないので、コンストラクタで呼び出すことができない)shared_from_thisをコールバックインターフェイスオブジェクトで使用できないのはなぜですか?

#include <boost/tr1/memory.hpp> 

class MyCallbacks : public std::tr1::enable_shared_from_this<MyCallbacks> 
{ 
public: 
    virtual ~MyCallbacks() {} 
    virtual void callback1() = 0; 
}; 

class Worker 
{ 
public: 
    Worker(std::tr1::shared_ptr<MyCallbacks> cb) : callbacks(cb) {} 

    void do_work() { if (callbacks) callbacks->callback1(); } 

private: 
    std::tr1::shared_ptr<MyCallbacks> callbacks; 

}; 

class Boss : public MyCallbacks 
{ 
public: 
    Boss() : worker(shared_from_this()) {} 

    void go() 
    { 
    std::cerr << "Calling worker->do_work" << std::endl; 
    worker.do_work(); 
    } 

    void callback1() 
    { 
    std::cerr << "callback1" << std::endl; 
    } 

private: 
    Worker worker; 
}; 

int main (int argc, char const *argv[]) 
{ 
    std::tr1::shared_ptr<Boss> boss(new Boss); 
    boss->go(); 
    return 0; 
} 

答えて

関連する問題