2012-06-06 82 views
-1

我們有以下幾點:如何在C++中檢查託管指針是否無效?

​​

,問題是怎麼做的,與INT ^?

int^ a; 
if(?????????????) 
a = gcnew int; 

P.S. nullptr並不能解決所有問題,因爲我發現對象的保留值(nullptr判斷爲不相等),並在此之後立即使用此對象導致System.ObjectDisposedException。

+2

注意'int * a;'不用'NULL'初始化'a',它包含垃圾。 – Naveen

+0

如果我們討論調試版本,或者像內存破壞警衛(即0xCDCDCDCD)。 – Forgottn

回答

4

使用nullptr

int ^a = nullptr; 
... 
if(a == nullptr) 
{ 
    a = gcnew int; 
} 
... 
+1

'a!= nullptr' ??? – xxbidiao

+0

Ooops ...對不起...... – Forgottn

+0

貌似有問題,因爲指針不是nullptr但可以釋放,並導致「無法使用釋放的對象」異常。 – xxbidiao

0

這應該檢查變量,但它真的很奇怪的實現,依靠.NET GC運行。

try 
      { 
       ATestFunctionThatUseVariableForNothing(a); 
      } 
      catch (System::ObjectDisposedException^ e) 
      { 
       a = nullptr; 
      } 
      catch (System::NullReferenceException^ e) 
      { 
       a = nullptr; 
      } 

無論如何應該有另一個更好的解決方案。

如果我們打算像正常*指針那樣「刪除」那個指針,那麼安全的做法是手動「刪除」(設置爲nullptr)。

相關問題