概述
最近工作的时候遇到了一个现象,当通过C++类对象的空指针调用没有使用this指针的成员函数时,不会出现段错误
测试代码
#include <iostream>
using namespace std;
class test
{
public:
test();
~test();
void func_not_use_this(){cout<<__func__<<endl;}
void func_use_this() {cout<<__func__<<endl;a=10;}
int a;
};
int main(int argc, char const *argv[])
{
test *pt=nullptr;
pt->func_not_use_this();
pt->func_use_this();
return 0;
}
原因分析
因为在C++中,类的成员函数并不占内存空间,成员函数的调用最终都会被编译器转化为一个全局函数的调用,成员函数只是个地址。所以即使类对象的指针为空,也可以正常调用。所以,对于对于成员函数的调用不会有问题
然而,因为成员变量是占用内存的,而test 对象的指针并没有指向一块有效的内存区域,所以,this指针是nullptr。所以,当使用这个空this指针访问具体的内存(比如成员变量a)时,就会出现段错误。
所以,如果一个成员函数没有访问任何成员变量,请将这个成员函数设置为全局函数,如果设置为成员函数,当使用一个类对象的空指针也能访问成功,就会使得类对象失效的问题难以暴露出来
最后
以上就是安静月饼为你收集整理的23.C++类对象的指针为空时,调用成员函数不会挂掉的全部内容,希望文章能够帮你解决23.C++类对象的指针为空时,调用成员函数不会挂掉所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复