我只是好奇这个程序是如何打印class的func()语句的。
#include <iostream>
using namespace std;
class foo
{
public:
void func ()
{
cout << "In func" << endl;
}
private:
int a;
};
int main () {
foo *f1 = NULL;
f1->func();
}编译器版本: g++ (Ubuntu/Linaro 4.4.7-1ubuntu2) 4.4.7版权所有(C) 2010自由软件基金会,Inc.
我怎么才能得到方法func()的打印结果呢?
发布于 2015-10-13 17:37:03
取消引用null指针会产生未定义的行为。
我可以猜到为什么这对你仍然有效(但同样是UB!),但是如果你试图访问func()中的成员变量,我很确定它会停止工作。
发布于 2015-10-13 17:37:28
取消引用NULL指针意味着您具有未定义的行为。
然而,在这种情况下,在大多数实现中,您最终会得到正确的函数,this为NULL,调用非虚方法的正常实现是将隐藏参数this设置为指向对象(在本例中为NULL)的指针,然后直接调用函数。
由于您不能访问成员或调用虚函数,也不能以任何其他方式使用this指针做任何有用的事情,所以您非常接近static方法的场景,我建议您在不使用this指针的情况下使用该方法。
对于最基本的情况,除了检查NULL是否正常之外,您不想对this指针做任何其他事情,您仍然可以使用static方法,并显式地将指针传递给对象:
static void func(foo* diz) {
cout << "In func" << endl;
if( diz != NULL ) {
diz->actual_work_on_diz();
}
}https://stackoverflow.com/questions/33099121
复制相似问题