指针仍然可以调用成员函数,在它被设置为 NULL 并删除被调用后

Pointer still able to call member function, after it was set to NULL and delete being called on it

#include<stdio.h>

class test2
{
    public:

    void testFunc()
    {
        printf("test");
    }

    test2(){}
   ~test2(){}

};


class test1 : test2
{
    public:

    test1(){
        link = new test2();}    
    ~test1(){ 
        delete link;
        link = NULL;
    }


   test2* link = NULL;
    private:

};
 
 

int main()
{
  test1 *ptr = new test1();
  delete ptr;

  ptr->link->testFunc();


    return 0;
}

我想在调用test1的析构函数后删除test2对象。然而,在调用 delete 并将 link 设置为 NULL 之后,我仍然能够调用成员函数“testFunc”并使用 link 指针打印“test”。 为什么这是可能的?

如果一个程序在其生命周期之外访问一个对象,那么该程序的行为是未定义的。您的程序在其生命周期之外访问了一个对象。您的程序的行为未定义。您观察到的行为是因为该行为未定义。您可能已经观察到任何其他行为,因为它是未定义的,但您没有观察到其他行为,因为它是未定义的。