1. 程式人生 > >C++雜談 為什麼類的空指標物件可以訪問類某些的成員函式

C++雜談 為什麼類的空指標物件可以訪問類某些的成員函式

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指標