1. 程式人生 > >關於多個指標指向同一個物件的bug分析

關於多個指標指向同一個物件的bug分析

有一個類A

 class A 
 { 
   bool m_bIslink;
 };

在類B中new了一個A置m_bIslin = true,new和delete都由B來負責,同時類C中也需要用到A的指標。

於是在C中就會儲存一個A的指標物件。C的解構函式中會判斷A::m_bIslink==true,因此C中不會delete。

這樣設計有缺陷:假如在B中已經delete掉了A。在C中儲存的指標還在,但指向的內容已經不在了,這時候

去判斷A::m_bIslink那訪問越界了,得到的結果未知。如果得的是false,那麼C中就會再次delete,就會出問題了。

 

好的設計:m_bIslink不要放在A中,應該放在C中,當在C中linkA時設定好m_bIslink即可。這時候C中就可以自己判斷要不要delete