2009-01-19 51 views
5

我正在使用boost的共享指針,並且使用enable_shared_from_this來啓用共享指針。代碼如下所示:boost_ptr_cast in shared_from_this()

class foo : public boost::enable_shared_from_this<foo> 
{ 
    boost::shared_ptr<foo> get() 
    { 
    return shared_from_this(); 
    } 
} 

爲什麼shared_from_this會拋出weak_ptr_cast異常?

回答

8

如果您在堆棧中聲明瞭foo,以便沒有其他共享指針指向foo。例如:

void bar() 
{ 
    foo fooby; 
    fooby.get(); 
} 

fooby.get()會拋出weak_ptr_cast異常。

要解決這個問題,在堆上聲明fooby

void bar() 
{ 
    boost::shared_ptr<foo> pFooby = boost::shared_ptr<foo>(new foo()); 
    pFooby->get(); 
} 

另一種可能是你正在嘗試使用shared_from_this構造完成之前,這將再次嘗試返回一個共享指針沒有按還沒有存在。

+1

從構造函數調用`shared_from_this()`可能是* shared_from_this()失敗的原因(我的意思是開發時,而不是生產代碼)。不幸的是,最好的(唯一的?)解決方案似乎是使用兩階段結構(所有它的缺點)。 – 2011-04-15 12:52:46