我在Nmap's source code中找到了这个:
/** This function MUST be overwritten on ANY class that inherits from
* this one. Otherwise getBinaryBuffer will fail */
virtual u8 * getBufferPointer(){
netutil_fatal("getBufferPointer(): Attempting to use superclass PacketElement method.\n");
return NULL;
} /* End of getBufferPointer() */
如果getBufferPointer
是纯虚拟的,那么任何未能实现它的派生类都将在编译时被捕获。为什么选择运行时错误而不是编译器触发错误会更好?
答案 0 :(得分:2)
在编译时错误中,永远不应该更喜欢运行时错误,特别是当语言提供了一种更简单的方法来完成您想要的操作时,这也会给编译器带来错误。在我5年多的C ++编码中,我从未遇到过用你的方法创建方法的理由。
运行时错误=许多可能的原因,我需要自己的调试语句才能找到它。可能还需要多次运行程序。在您的情况下,我可能有其他类无法覆盖该方法,这可能会导致某些未定义点的错误。
编译时间错误=一个原因,我的编译器告诉我发生了什么。
答案 1 :(得分:1)
让它变得纯粹虚拟,即
virtual u8 * getBufferPointer() = 0;
以便从其父类(PacketElement)派生的任何子类都应该重新定义它。