C++空指针(nullptr)访问成员函数

目录

✅ 可以调用(成员函数中未使用 this 指针)

 ❌ 可能导致未定义行为(成员函数中使用了 this 指针)

✅ 解决方案:先检查 this 是否为空

总结


在 C++ 中,空指针(nullptr)可以调用成员函数,但如果成员函数内部 使用了 this 指针,就可能导致 未定义行为(例如访问空指针成员变量)。
因此,在涉及 this 指针的成员函数中,需要先检查 this 是否为空,以保证代码的健壮性

✅ 可以调用(成员函数中未使用 this 指针)

#include <iostream>

class Test {
public:
    void show() {  // 该函数没有访问成员变量
        std::cout << "Member function called!" << std::endl;
    }
};

int main() {
    Test* ptr = nullptr;
    ptr->show();  // ✅ 运行成功
    return 0;
}

解释

  • show() 没有访问成员变量,也没有使用 this,所以即使 ptrnullptr,它依然可以调用该函数。

❌ 可能导致未定义行为(成员函数中使用了 this 指针)

#include <iostream>

class Test {
public:
    int val = 10;
    
    void show() {
        std::cout << "Value: " << this->val << std::endl;  // ❌ 使用 this 指针
    }
};

int main() {
    Test* ptr = nullptr;
    ptr->show();  // ❌ 运行时崩溃(访问空指针的成员变量)
    return 0;
}

解释

  • show() 访问了 this->val,而 this == nullptr,所以会导致 未定义行为(崩溃)。

✅ 解决方案:先检查 this 是否为空

#include <iostream>

class Test {
public:
    int val = 10;

    void show() {
        if (this == nullptr) {
            std::cout << "Error: this is null!" << std::endl;
            return;
        }
        std::cout << "Value: " << this->val << std::endl;
    }
};

int main() {
    Test* ptr = nullptr;
    ptr->show();  // ✅ 代码健壮,输出 "Error: this is null!"
    return 0;
}

解释

  • show()先检查 this 是否为空,如果是 nullptr,则打印错误信息并返回,避免崩溃。

总结

  1. 空指针可以调用成员函数,但前提是 成员函数没有使用 this 指针
  2. 如果成员函数 访问了成员变量this 指针就会被用到,如果 this == nullptr,就会导致未定义行为
  3. 为了保证代码健壮性,在函数中使用 this 前,应先检查 this 是否为空

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值