2015-06-19 130 views
1

在正常的C++中,如果指針不指向任何對象,則會使用NULL表示指針。C++/CLI如何判斷句柄是否指向任何對象

class* object1 = NULL; //NULL is a special value that indicates 
         //that the pointer is not pointing to any object. 

if(object1 == NULL) { 
    cout << "the pointer is not pointing to any object" << endl; 
} 
else { 
    cout << "the pointer is pointing to any object" << endl; 
} 

那麼C++/CLI Handles看起來如何? 我在互聯網上發現了這個。有人可以告訴我,我是否正確?

class^ object2 = nullptr; 
if(object2 == nullptr){ 
    cout << "the pointer is not pointing to any object" << endl; 
} 
else { 
    cout << "the pointer is pointing to any object" << endl; 
} 
+2

是的你是對的。你也可以在現代C++中使用nullptr而不是NULL(11以上)。 –

+0

@LukaszDaniluk哦,在學校裏,我們總是使用NULL(只使用指針,沒有句柄)。那麼這兩者之間最大的區別是什麼,你應該使用nullptr而不是NULL的原因是什麼? – delorax

+2

C++ 11標準化並清理NULL。在過去,它或多或少是一個指向0的指針。現在它基本上仍然是一個指向零的指針,但是使用了一個不太容易被濫用的包裝器。 http://stackoverflow.com/questions/1282295/what-exactly-is-nullptr – user4581301

回答

1

你不應該在C++中使用NULL。選擇nullptr

考慮一下:

void some_function(some_class* test); 
void some_function(int test); 

int main() 
{ 
    some_function(NULL); 
} 

由於我們人類解釋NULL爲指針「型,」一個程序員的預期第一過載被調用。但NULL通常被定義爲整數0 - 因此編譯器會選擇第二個。如果你明白髮生了什麼,這不是問題,但它並不直觀。

另外,0有效的存儲器地址。在桌面編程中,我們通常不會分配數據來解決0,但它可能在其他某些環境中有效。那麼我們可以做些什麼來檢查0的分配?

爲了避免歧義,C++採用了明確的nullptr。它不是一個整數,它有它自己的特殊類型,不能被誤解:這個指針有一個強類型空的值。

相關問題