空类指针调用成员函数 类内的this指针
2012-12-27 16:48
190 查看
运行下面中的代码,得到的结果是什么?
class A
{
private:
int m_value;
public:
A(int value)
{
m_value = value;
}
void Print1()
{
printf("hello world");
}
void Print2()
{
printf("%d", m_value);
}
};
int _tmain(int argc, _TCHAR* argv[])
{
A* pA = NULL;
pA->Print1();
pA->Print2();
return 0;
}
分析:
答案是Print1调用正常,打印出hello world,但运行至Print2时,程序崩溃。
调用Print1时,并不需要pA的地址,因为Print1的函数地址是固定的。编译器会给Print1传入一个this指针,该指针为NULL,但在Print1中该this指针并没有用到。只要程序运行时没有访问不该访问的内存就不会出错,因此运行正常。
在运行print2时,需要this指针才能得到m_value的值。由于此时this指针为NULL,因此程序崩溃了。
class A
{
private:
int m_value;
public:
A(int value)
{
m_value = value;
}
void Print1()
{
printf("hello world");
}
void Print2()
{
printf("%d", m_value);
}
};
int _tmain(int argc, _TCHAR* argv[])
{
A* pA = NULL;
pA->Print1();
pA->Print2();
return 0;
}
分析:
答案是Print1调用正常,打印出hello world,但运行至Print2时,程序崩溃。
调用Print1时,并不需要pA的地址,因为Print1的函数地址是固定的。编译器会给Print1传入一个this指针,该指针为NULL,但在Print1中该this指针并没有用到。只要程序运行时没有访问不该访问的内存就不会出错,因此运行正常。
在运行print2时,需要this指针才能得到m_value的值。由于此时this指针为NULL,因此程序崩溃了。
相关文章推荐
- 使用纯C函数指针调用C++的类成员函数
- 类成员函数返回(成员)函数指针,包装类调用外部类的成员方法
- 浅析C++中的this指针 通过空指针(NULL)可以正确调用一些类的成员函数?
- 成员函数指针数组,处理函数中调用:
- 转: C++指针直接调用类成员函数探讨
- 使用纯C函数指针调用C++的类成员函数
- 详解this指针--为什么空的对象指针可以调用成员函数
- 为什么通过空指针(NULL)可以正确调用一些类的成员函数?
- static函数 函数调用缺少参数列表;请使用“&XXX”创建指向成员的指针;类的static成员函数
- NULL指针调用成员函数
- 不知道子类成员函数的情况下,用父类方法调用子类的成员函数指针,需增加/vmg命令
- 巧妙解决问题:&CMFCcodeDlg::RunCommands”创建指向成员的指针。MFC多线程调用要求调用的接口必须是全局函数或静态成员函数
- 通过一个非法的指针或者NULL指针调用成员函数会发生什么?
- NULL指针调用成员函数的例子
- 【转】C++编程中用指针直接调用类成员函数问题及其解决方法
- 基类子类的this指针相同,但在基类函数永远调用基类的成员变量
- C++成员函数指针定义和调用
- error: 函数调用缺少参数列表;请使用“&BinTree<char>::_PrintNode”创建指向成员的指针
- C++中通过派生类调用第二基类的普通成员函数时this指针的调整
- 简析function/bind如何实现类成员函数指针绑定调用