C ++ - 程序在定义自定义析构函数时崩溃

时间:2018-01-22 17:22:43

标签: c++ destructor

我有一个这样的课程:

class Foo{
public:
    Foo* next = nullptr;

    Foo() = default;

    Foo(Foo *next){
        Foo::next = new Foo(*next);
    }

    Foo(const Foo &copy){
        next = new Foo(*copy.next);
    }


    ~Foo(){
        delete next;
    }
}

它编译,但是当我在任何地方实例化该程序时,程序崩溃了。当使用调试器时,"断点陷阱"在delete next触发。

为什么?

编辑:

问题是,有些情况可以将next设置为在类外部创建的指针。我以为你可以删除在任何地方创建的指针。

1 个答案:

答案 0 :(得分:-1)

您的指针next未初始化,指向 未知的内容。 delete(很可能,如果你很幸运)会尝试删除它。确保指针指向使用new分配的内存,或者是nullptr