c++析构函数的一个疑问

我自己定义了一个析构函数,主要是将指针为空。为什么用我这个析构函数就会报错,说什么出现断点,要么就是报错是nullptr。我的析构函数不就是要将指针变为空吗,为什么还会报错呢?还是说重复delete这个指针了?

img

编译器是啥版本,析构函数本身没有问题,把前面的代码发出来看看

有可能是 拷贝构造没有写 , 用的默认的,有一个浅拷贝,重复 delete 了 两个指针指向的同一片内存

  • 这个问题的回答你可以参考下: https://ask.csdn.net/questions/7736669
  • 这篇博客你也可以参考下:C++ 指针空值nullptr
  • 除此之外, 这篇博客: C++基础语法总结中的 十、指针空值nullptr 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  •   NULL本质是用宏定义的:

    #ifndef NULL
    #ifdef __cplusplus
    #define NULL 0
    #else
    #define NULL ((void *)0)
    #endif
    #endif
    

    但是在极端的函数重载情况下,可能会有问题,如下代码

    void f(int* p)
    {
        cout << "f(int*)" << endl;
    }
    void f(int x)
    {
        cout << "f(int)" << endl;
    }
    int main()
    {
        f(NULL);//因为NULL的定义 会匹配到f(int) 但是我想让它去的是int*啊
        f(0);
        f((int*)NULL);//要正确匹配 必须强转一下
        f(nullptr);
    }
    

    所以C++11引入了nullptr关键字

    注意:

    • 在C++11中,nullptr是作为关键字被引入的,不需要引头文件
    • 在C++11中,sizeof(nullptr)和sizeof((void)*0)所占字节数相等
    • 为了规避极端情况,提高代码健壮性,空指针建议使用nullptr
  • 您还可以看一下 朱有鹏老师的朱老师C++第1部分-1.4.C++新增和有变化的关键字课程中的 1.4.9.C++11引入的nullptr小节, 巩固相关知识点