前言
c++11 对智能指针做了很大的优化,废弃了 c++98 中的auto_ptr
,引入了三种新的智能指针:unique_ptr
,shared_ptr
,weak_ptr
。
本文将针对unique_ptr
的一些使用技巧做一些整理和归纳。在正式开始之前,我们首先来回顾一下unique_ptr
的特点:一个unique_ptr
对象内包含一个原始指针,该unique_ptr
对象负责管理原始指针的生命周期。
一个unique_ptr
对象始终是其关联的原始指针的唯一拥有者。
在了解了unique_ptr
的特点之后,我们来具体看看日常开发中unique_ptr
的一些使用场景和技巧。
一些场景
本地对象指针
在开发中,我们经常会遇到或者写出类...
对于熟悉 c99 的人来说,Designated Initializers 并不算是什么新鲜事物,然而 c++直到 c++20 才正式支持这一特性。 虽然在 c++20 之前,像 GCC 这样的编译器通过扩展的形式已经对该特性做了支持,但是随着 c++20 将其纳入新标准,这一特性将在所有编译器中得到支持。
基本用法
Designated Initialization 是聚合初始化(Aggregate Initialization)的一种形式。 在 c++20 中,聚合类型(Aggregate types)是指:
- 数组类型
- 具备如下特性的 class 类型:
- has no private or protected...
1. 概览
要谈论 LevelDB 的 Compaction 就不得不从 LevelDB 的整个数据写入流程入手。LevelDB 的基本写入流程大致为:
- 数据先写入到 WAL 日志中,做持久化
- 然后数据同步到
mutable memtable
中 - 当
mutable memtable
大小达到Options.write_buffer_size
设置的大小时,就会变成immutable memtable
,并且创建一个新的mutable memtable
- 后台的 Compaction 线程会把
immutable memtable
dump 成 sstable 文件,并设置于 Level 0 层 - 当 Level i 达到一定条件后,...