2015-12-01 59 views
-1

我使用了關鍵詞「this」,其中大部分都給出了類似的例子。「this」這個關鍵字是什麼意思?

http://www.geeksforgeeks.org/this-pointer-in-c/ http://www.tutorialspoint.com/cplusplus/cpp_this_pointer.htm

當我遇到了這個,

Token::~Token() { 
if(this == nullptr) { return; } 
.... } 

這只是沒有任何意義。 「這」指的是什麼?如果它指向'標記',它是如何做到的?

+2

可能重複http://stackoverflow.com/questions/ 6779645/use-of-this-keyword-in-c – Rao

+3

嘗試閱讀[書籍](http://stackoverflow.com/questions/388242/the-definitive-c-book-guide-and-list)而不是使用谷歌搜索隨機關鍵字。 – user657267

+0

你說得對,那沒有意義。 'this == nullptr'在一個有效的程序中不可能是真的,所以優化編譯器很可能簡單地將它扔掉。 –

回答

3

this只是指向該函數所屬的類的當前對象的指針。它更多的是傳遞給C++類的每個非靜態方法的隱藏參數。它只是指向一個類的特定實例以及該對象所具有的所有數據。因此,對於你的例子:

Token::~Token() { 
if(this == nullptr) { return; } 
.... } 

This只是指向令牌類構函數的對象。

if(this == nullptr) { return; } 

更具體地說,上面的if語句是查看對象的實例是否等於空引用。

+0

「如果上面的語句看到對象的實例是否等於空引用」 - 這是不可能的,除非程序已經觸發了未定義的行爲 –

+0

@ M.M儘管如此,這正是if語句正在做的事情。 – immibis

+0

謝謝你的解釋!這很清楚! – user3748593

2

檢查thisNULL在c + +是不鼓勵。當在指向類的NULL指針上調用該方法時,this可能爲NULL。一個例子:

Token* token = nullptr; 
token->~Token(); 

該代碼真的應該檢查如果標記爲NULL,而不是在析構函數中檢查NULL。

Token* token = nullptr; 
if (token) 
    token->~Token(); 

此鏈接解釋你的問題:http://www.viva64.com/en/b/0226/

谷歌和福昕如何固定pdfium這個問題:

https://bugs.chromium.org/p/pdfium/issues/detail?id=4 https://groups.google.com/forum/#!topic/pdfium/8mTxtmle4ok