博客 / 詳情

返回

C++的this指針辨析

C++ 的 this 指針

指針在這裏面是非常難理解的東西,所以要根據例子,自己實踐。
在你沒有去具體瞭解之前,不要輕易下結論。
最近,看了《在山的那邊》,又有一點新感悟( •̀ ω •́ )✧

this指針

調用成員函數時,成員函數通過一個名為 this 的隱式參數來訪問調用它的那個對象,用請求該函數的對象地址初始化 this ,this 的指向總是自己這個對象,所以 this 是一個常量指針

Box* get_address()   //得到this的地址
{
    return this;
}
Box* get_address()   //得到this的地址
{
    Box box;
    this = &box; // error: lvalue required as left operand of assignment
    return this;
}

在 C++ 中,this 指針是一個隱式傳遞給非靜態成員函數的常量指針,用於指向調用該函數的對象。以下是對你的代碼和 this 的特性總結:

特性:

  1. this 是一個隱式指針

    • 每個非靜態成員函數都有一個隱式的 this 指針,用來訪問調用該成員函數的對象。
    • this 指針的類型為 ClassName* const,即常量指針,不能被修改。
  2. this 指針的用途

    • 訪問成員變量和成員函數。
    • 返回對象自身的地址。
    • 在需要對象指針的場景下傳遞 this
  3. 靜態成員函數中沒有 this 指針

    • 靜態成員函數不與任何特定對象綁定,因此沒有 this 指針。

代碼分析

  1. 正確的用法

    Box* get_address() // 返回當前對象的地址
    {
        return this;
    }

    解釋

    • 函數中 this 指針指向調用該函數的對象。
    • 返回 this 時即返回調用該函數的對象地址。
    • 這是一個有效的用法。
  2. 錯誤的用法

    Box* get_address() 
    {
        Box box;
        this = &box; // 錯誤: 賦值操作試圖修改 `this`
        return this;
    }

    錯誤原因

    • this 是一個常量指針,不能被賦值。
    • this 的作用是固定指向當前調用對象,任何試圖修改 this 都會導致編譯錯誤。

總結

  • this 指針的值是無法更改的,它始終指向當前對象。
  • 如果需要返回一個新對象的地址,應該直接返回新對象的地址而不是試圖修改 this

正確示例:

Box* create_new_box()
{
    Box* box = new Box();
    return box; // 返回新對象的地址
}
user avatar
0 位用戶收藏了這個故事!

發佈 評論

Some HTML is okay.