leveldb源代码,为什么db_impl.cc实现纯虚函数“DB :: Delete”

时间:2013-08-15 09:05:43

标签: c++ leveldb

以下是统计和实施:

统计: virtual Status Delete(const WriteOptions& options, const Slice& key) = 0;

实现:      Status DB::Delete(const WriteOptions& opt, const Slice& key) { WriteBatch batch; batch.Delete(key); return Write(opt, &batch); }

1 个答案:

答案 0 :(得分:0)

基类中的删除可能不完整。但是,该实现提供了基类可以执行的所有操作。因此派生类应该调用Base :: Delete。没有适当的文档,程序员可能会错过。

在10.3的标准中:“在一个类中声明的虚函数应在该类中定义或声明为纯(10.4),或两者兼有;”

编译(g ++ -std = c ++ 11 test.cc -o test)并快乐地运行:

#include <iostream>
struct X { virtual void f() = 0; };
struct Y : X { virtual void f(); };
void X::f () { std::cout << 'X' << std::endl;}
void Y::f () { X::f(); std::cout << 'Y' << std::endl;}
int main() {
    Y y;
    y.f();
    return 0;
}