程序崩溃,因为堆栈溢出。这是因为你叫foo()
递归永远
struct derived : public base {
void foo() { base:foo(); }
};
最重要的部分是base:foo();
,查看丢失的结肠?这是同一个标签,然后调用foo();
base:
foo();
无关,当你建立这个用gcc和选项-Wall
,你会得到两个警告
a.cpp: In member function 'virtual void derived::foo()':
a.cpp:6:18: warning: label 'base' defined but not used [-Wunused-label]
void foo() { base:foo(); }
^
a.cpp: In function 'int main()':
a.cpp:13:12: warning: deleting object of polymorphic class type 'base' which has non-virtual destructor might cause undefined behaviour [-Wdelete-non-virtual-dtor]
delete b;
^
我的编译器警告我:' '基地':未引用label'。这铃响了。 –
这就是为什么您启用警告并修复它们的原因。用* gcc *和* clang *试试'-Wall -Wextra'来获得一组非常合理的基本警告,并添加'-Werror'来强制自己修复它们。我似乎记得'/ W:4'对于MSVC是可以的,但是谷歌或者试用一下。 – hyde