{C++ 基础} {C++ 高级} {C#界面,C++核心算法} {设计模式} {C#基础}
就是因为动态调用是从下向上调用每一个,所以必须的实现. 原文删除,看下面周星星的评论吧,很不错的啊!很感谢周星星!
posted on 2006-07-31 20:42 梦在天涯 阅读(2745) 评论(6) 编辑 收藏 引用 所属分类: CPlusPlus
代码认为弄复杂了吧,其实写成如下就可以了 struct A { virtual ~A() = 0; }; struct B : A { virual ~B() {} }; int main( void ) { B x; } 编译的时候肯定报A::~A未实现,这是因为普通virtual只调用动态类型的那个函数实现,所以基类的可以不实现;而virtual析构函数则不同,它需要由下往上层层调用,所以每一层都需要实现。 另外,有没有实现代码 跟 是否为纯虚 是没有关系的,只要把 A 改为: struct A { virtual ~A() = 0 {} }; 回复 更多评论
A destructor can be declared virtual(10.3) or pure virtual(10.4);if any object of that class or any derived class are created in the program, the destructor shall be defined. If a class has a base class with a virtual destructor, its destructor (whether user-or implicitly-declared) is virtual. 回复 更多评论
hpho说 struct A { virtual ~A() = 0 {} }; 应当写成 struct A { virtual ~A() = 0; }; A::~A() { } 因为C++规定 =0 和 {} 不能同时出现。 回复 更多评论
ISO/IEC 14882:2003(E) 10.4.2: [Note: a function declaration cannot provide both a pure-specifier and a definition —end note] [Example: struct C { virtual void f() = 0 { }; // ill-formed }; —end example] 回复 更多评论
看标准C++确实有好处, 偶最近也得到了 C++ 03标准文档, 哈哈, 向两位高手学习, 在C++博客,你们的文章看得最多, 表示感谢 ! 回复 更多评论
干嘛不用class来定义捏 回复 更多评论