谁能解释一下:空指针对象成员函数调用正常

neosu 2007-08-07 09:38:37
class A
{
public:
int b;
int func1(){return 10;};
};

//调用时
A * pa = NULL;
int aa = pa->func1();//这行不出错,结果正确


调试时发现, pa地址为 NULL,而pa->func1地址有效。

谁能解释一下?
...全文
160 点赞 收藏 7
写回复
7 条回复
luojinping 2012年08月11日
类方法属于类。整个类只有一份拷贝,所有对象共用。因此调用类方法不要求拥有有实体对象,而数据成员在每个对象中有自己的一份独立实体,所以方法中有数据成员操作时,使用空指针调用会出错,因为无法解析数据成员。
编译器编译后的成员函数的第一个参数是this指针,通过this指针引用数据成员及调用其它成员函数。由于你调用的成员函数没有使用到类的数据成员,所以即使传入的this指针为空,运行也不会出错。
回复 点赞
hrx1989 2010年12月22日
学习了!
原来这样都可以用this指针!!!
回复 点赞
seysey 2007年08月07日
david能否解释一下为什么虚函数就会报错了?
谢谢
回复 点赞
Tracy2007 2007年08月07日
楼上解释的很好啊,学习了
回复 点赞
jxlczjp77 2007年08月07日
呵呵,这是正常的,只要函数里面不通过this指针去操作成员变量就行,成员函数跟一般的函数没什么差别,只不过调用方式需要一个类的对象或者指针来调用罢了,因为它默认绑定了一个this指针形参而已,这个指针为0也没问题。
回复 点赞
david2083 2007年08月07日
int aa = pa->func1();

这个不是虚函数,函数地址直接编译到这里,所以能调用
相当于 int a = A::func1(this)
不过传给func1的this指针应该是NULL

如果是虚函数,就可能会出错了
int a = pa->vtable[0](this)
回复 点赞
xiantongyuan 2007年08月07日
成员函数是独立于对象的,也就是说它不在对象内部。
回复 点赞
发动态
发帖子
C++ 语言
创建于2007-09-28

3.1w+

社区成员

24.8w+

社区内容

C++ 语言相关问题讨论,技术干货分享
社区公告
暂无公告