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

标签 c++ pointers delete-operator

<分区>

#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 并将链接设置为 NULL 之后,我仍然能够调用成员函数“testFunc”并使用链接指针打印“test”。 为什么这是可能的?

最佳答案

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

关于c++ - 指针仍然可以调用成员函数,在它被设置为 NULL 并删除被调用后,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71012034/

相关文章:

c++ - 删除队列对象数组

c++ - 如何调用对象在函数内部的类方法

c++ - 如何使用 Cocoa 或 C++ 在 Mac OS X 中截屏

c - 为指针数组动态分配空间

c - 如何获取C指针数组长度?

c++ - 删除数组c++崩溃问题

c++ - 删除不完整类型在 C++ 中不是错误时,是否存在真实案例?

C++虚拟模板方法

c++ - 排列之间的差异

c - C 中的硬链接(hard link)表