C++中空指针也是可以调用成员函数的,但是也要注意有没有用到this指针
    如果用到this指针,需要加以判断保证代码的健壮性

    1. #include <iostream>
    2. #include <string>
    3. using namespace std;
    4. class Person
    5. {
    6. public:
    7. Person(int age) {
    8. this->m_age = age;
    9. }
    10. void showName() {
    11. cout << "Class name" << endl;
    12. }
    13. void showAge() {
    14. cout << "Age is " << this->m_age << endl;//若设置指针为空,则this为空指针,不指向任何值
    15. }
    16. int m_age;
    17. };
    18. void main() {
    19. Person* p;
    20. p = NULL;
    21. p->showName();
    22. p->showAge();//此时this指针和p为空指针,运行异常
    23. system("pause");
    24. }

    为解决上述问题,可以在调用任何成员时判断this指针是否为空,如果为空则直接返回,这样可以增加代码的健壮性,令其适应更多场合,容错率更高。这种增加代码健壮性的行为和前面在析构函数中进行深拷贝的思想类似。

    1. #include <iostream>
    2. #include <string>
    3. using namespace std;
    4. class Person
    5. {
    6. public:
    7. Person(int age) {
    8. this->m_age = age;
    9. }
    10. void showName() {
    11. cout << "Class name" << endl;
    12. }
    13. void showAge() {
    14. //这个函数调用了一个成员变量,那么需要对this指针进行判断;
    15. if (this == NULL) {
    16. return;
    17. }
    18. cout << "Age is " << this->m_age << endl;//若设置指针为空,则this为空指针,不指向任何值
    19. }
    20. int m_age;
    21. };
    22. void main() {
    23. Person* p;
    24. p = NULL;
    25. p->showName();
    26. p->showAge();//此时this指针和p为空指针,直接返回。
    27. system("pause");
    28. }