最近做項目寫代碼遇到了對象自殺的問題。
第一個是自己設計的,對象持有定時器,自己維護生命周期。
第二個是無意中遇到的,由于采用boost的線程庫,將成員函數(shù)變?yōu)榫€程用,最后在一堆調(diào)用之后居然把自己殺掉了。
很不幸的是,在過程中都遇到了相同的問題——堆棧掛掉了。
然后一輪定位,居然都是boost mutex的問題,scoped_lock很容易讓人放松警惕。
void XXX(
)
{
boost::recuisive_mutex::scoped_lock lk(m_mutex);


YYYY();


}
void YYY(
)
{


delete p;// 釋放XXX所在對象


}
作為類成員的mutex沒有被解鎖,然后所在的類就被釋放了,這就造成了堆棧掛掉。
對象自殺顯然不是一種很好的風格,還是盡量避免吧!