我是靠谱客的博主 安静月饼,最近开发中收集的这篇文章主要介绍23.C++类对象的指针为空时,调用成员函数不会挂掉,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

最近工作的时候遇到了一个现象,当通过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++类对象的指针为空时,调用成员函数不会挂掉所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(50)

评论列表共有 0 条评论

立即
投稿
返回
顶部