-
final 指定符 (C++11 起)
在C++11中關鍵字final,用來指定派生類不能覆寫虛函數,或類不能被繼承。應用到成員函數時,標識符final 在類定義中的成員函數聲明或成員函數定義的語法中,立即出現於聲明器後。應用到類時,標識符 final
出現在類定義的起始,立即在類名後。例如下面leveldb代碼中,類PosixLogger不能被其他的類繼承了
namespace leveldb {
class PosixLogger final : public Logger {
public:
// Creates a logger that writes to the given file.
//
// The PosixLogger instance takes ownership of the file handle.
explicit PosixLogger(std::FILE* fp) : fp_(fp) {
assert(fp != nullptr);
}
~PosixLogger() override {
std::fclose(fp_);
}
.......
.......
.......
private:
std::FILE* const fp_;
};
} // namespace leveldb
#endif // STORAGE_LEVELDB_UTIL_POSIX_LOGGER_H_
-
override 指定符(C++11 起)
在C++11中關鍵字override,它用來指定基類中的虛成員函數需要在子類中顯式地重寫,如果沒有重寫則編譯器報錯。例如在上面代碼中就有關鍵字override的使用
-
default 指定符
在C++11中關鍵字default,它用來顯式默認化的函數定義,令編譯器爲類生成特殊成員函數或比較運算符 (C++20 起)的顯式指令。其中特殊成員函數有:默認構造函數、複製構造函數、移動構造函數 (C++11 起)、複製賦值運算符、移動賦值運算符 (C++11 起)、析構函數。即,如果某個特殊成員函數在聲明時使用了default,那麼編譯器會爲該函數自動生成函數體。例如leveldb代碼
namespace leveldb
{
class LEVELDB_EXPORT Cache;
// Create a new cache with a fixed size capacity. This implementation
// of Cache uses a least-recently-used eviction policy.
LEVELDB_EXPORT Cache* NewLRUCache(size_t capacity);
class LEVELDB_EXPORT Cache {
public:
Cache() = default;
Cache(const Cache&) = delete;
Cache& operator=(const Cache&) = delete;
// Destroys all existing entries by calling the "deleter"
// function that was passed to the constructor.
virtual ~Cache();
// Opaque handle to an entry stored in the cache.
struct Handle { };
......
......
}//class Cache
}//namespace leveldb
關於cache的定義時,使用了該關鍵字。
-
delete 指定符
在C++11中關鍵字delete,它的定義與default是一樣的,但是功能不一樣。delete指示禁止使用特殊成員函數。在上面的代碼中使用到了關鍵字delete