Исходный код leveldb. Почему db_impl.cc реализует чисто виртуальную функцию & quot; DB :: Delete & quot;

Вот статистика и реализация:

стат:
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);
}

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;
}
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]