【发布时间】:2018-07-01 09:43:04
【问题描述】:
我有这样的课:
class Foo{
public:
Foo* next = nullptr;
Foo() = default;
Foo(Foo *next){
Foo::next = new Foo(*next);
}
Foo(const Foo ©){
next = new Foo(*copy.next);
}
~Foo(){
delete next;
}
}
它可以编译,但是当我在任何地方实例化该类时,程序崩溃了。使用调试器时,会在delete next 处触发“断点陷阱”。
这是为什么呢?
编辑:
问题是,在某些情况下,next 可以设置为在类之外创建的指针。我以为你可以删除在任何地方创建的指针。
【问题讨论】:
-
“为什么?”因为你违反了 3/5/0 的规则
-
其他的东西是什么?
-
你的程序不应该尝试删除之前没有用 new 初始化的东西。
-
请向我们展示更多上下文..
标签: c++ destructor