class TestObject
{
public:
TestObject()
{
std::cout << "TestObject!" << std::endl;
}
~TestObject()
{
std::cout << "~TestObject!" << std::endl;
}
void test()
{
std::cout << "Hello world in TestObject!" << std::endl;
}
static void testA()
{
std::cout << "Hello world in TestObject!" << std::endl;
}
virtual void testB()
{
std::cout << "Hello world in TestObject!" << std::endl;
}
void testC()
{
std::cout << m_age << std::endl;
}
void testD(int age)
{
std::cout << age << std::endl;
}
private:
int m_age;
};
int main(int argc, char* argv[])
{
TestObject* testDemo= &TestObject();
testDemo = nullptr;
testDemo->test();
testDemo->testA();
testDemo->testB(); //崩溃
testDemo->testC(); //崩溃
testDemo->testD(50);
}
对比分析可以看出
test():普通成员函数,没有调用到this指针
testA():静态成员函数,不属于某个实例,没有调用到this指针
testB():虚函数,调用该函数时会用到this指针,而此时this指针为空,导致崩溃
testC():普通成员函数,调用该函数访问类中的成员变量会用到this指针,而此时this指针为空,导致崩溃
testD(50):普通成员函数,没有调用到this指针