boost
一缕阳光a
(1)、从2018年8月开始从事分布式数据库内核开发工作,包括自研分布式分析型数据库OLAP、自研分布式数据库HTAP,根据开源数据库实现本公司集群型的OLTP产品,以及现在正在做的根据opengaussDB开发的HTAP类型数据库。
(2)、乐于专研,对分布式数据库有强烈的兴趣。
个人邮箱: zgaoq@163.com。
展开
-
std::unique_ptr<T>与boost::scoped_ptr<T>的特殊性
std::unique_ptr<T>与boost::scoped_ptr<T>的底层实现原理类型,不清楚是谁"借鉴"另一个的实现的,但这不重要。std::unique_ptr<T>与boost::scoped_ptr<T> 都禁用了拷贝构造和赋值函数,所以不能作为STL容器中的元素,要作为STL容器中的元素时,那么进行push_back()时要调用赋值函数,但是他们都禁用了拷贝构造和赋值函数,所以不能作为STL容器中的元素。但是可以有另一种方法,使用s原创 2021-09-18 17:21:59 · 181 阅读 · 0 评论 -
智能指针对比
智能指针对比:(1)、boost::shared_ptr<T> -- 基于引用计数器refcount(原子的)<1>、构造函数中refcount+1,析构函数中refcount-1,当refcount的值减到为0时,该对象就会被销毁。<2>、解决循环引用的问题:与weak_ptr<T>一起使用。weak_ptr<T>只引用不计数。...原创 2020-04-12 19:33:55 · 192 阅读 · 0 评论 -
Boost智能指针——boost::scoped_ptr(使用及原理分析)
简介 boost::scoped_ptr是一个比较简单的智能指针,它能保证在离开作用域之后它所管理对象能被自动释放。下面这个例子将介绍它的使用: 1 #include <iostream> 2 #include <boost/scoped_ptr.hpp> 3 4 using namespace std; 5 6 class Book ...转载 2020-04-12 19:06:21 · 1986 阅读 · 0 评论 -
boost学习之boost::lock_guard<T>与boost::unique_lock<T>的区别
(1)、boost::lock_guard没有unlock()功能boost::mutex mutex;void foo( ){ boost::lock_guard<boost::mutex> lock(mutex); process(data); ///没有unlock()功能,程序结束自动析构};(2)、unique_lock允许设置...原创 2018-09-11 09:39:03 · 1414 阅读 · 0 评论 -
map与unordered_map的区别
set/map底层实现的机制是红黑树。红黑树是一种近似于平衡的二叉查找树,默认是按升序排序的。在红黑树上做查找、插入、删除操作的时间复杂度为O(logN)。红黑树的缺点:空间占用率高,每一个节点都需要额外保存父节点、孩子节点和红/黑性质,使得每一个节点都占用大量的空间。 std::unordered_map对应哈希表,哈希表的特点就是查找效率高,时间复杂度为常数级别O(1),而额外空间...原创 2018-10-12 12:17:44 · 1135 阅读 · 0 评论 -
boost学习之boost::shared_ptr
Boost智能指针——shared_ptrboost::scoped_ptr虽然简单易用,但它不能共享所有权的特性却大大限制了其使用范围,而boost::shared_ptr可以解决这一局限。顾名思义,boost::shared_ptr是可以共享所有权的智能指针,首先让我们通过一个例子看看它的基本用法:#include <string>#include <iostrea...转载 2018-09-27 19:10:26 · 11056 阅读 · 0 评论 -
c++并发编程之原子操作的实现原理
原子(atomic)本意是”不能被进一步分割的最小粒子”,而原子操作(atomic operation)意为”不可被中断的一个或一系列操作”.处理器如何实现原子操作(1) 使用总线锁保证原子性如果多个处理器同时对共享变量进行读写操作,那么共享变量就会被多个处理器同时进行操作,这样读写操作就不是原子的,操作完之后共享变量的值会和期望的不一致.所谓总线锁就是使用处理器提供的一个LOCK...转载 2018-10-10 13:54:11 · 1634 阅读 · 0 评论 -
boost::split()的使用方式
引用的头文件 <boost/algorithm/string.hpp>boost::split()函数用于切割string字符串,将切割之后的字符串放到一个std::vector<std::string> 之中;有4个参数:以boost::split(type, select_list, boost::is_any_of(","), boost::token_c...原创 2018-12-11 16:21:03 · 27192 阅读 · 2 评论 -
boost::stable_vector简单解析
由于vector底层实现的机制是一个动态数组,因此使用std::vector<T>时,如果海量数据量时,会导致vector底层的数组很大很大,这样就会导致database很快就会出现内存不足而导致系统停止运行或卡住,这时就要考虑是否用其他的容器替换vector了,参考了很多的资料,找到了一个boost::stable_vector可以替换std::vector,这样就可以避免修改大量的...原创 2019-03-15 18:17:30 · 1862 阅读 · 0 评论 -
boost学习之boost::lock_guard源码分析
boost::lock_guard可以说是一种比boost::unique_lock轻量级的lock, 简单一些场景可以用它就行了。源码如下:template<typename Mutex>class lock_guard{private: Mutex& m; explicit lock_guard(lock_guard&);...原创 2018-09-11 09:28:34 · 1313 阅读 · 0 评论 -
C++ 11 nullptr关键字
C++ 11 nullptr关键字转载:https://www.cnblogs.com/DswCnblog/p/5629073.html熟悉C++的童鞋都知道,为了避免“野指针”(即指针在首次使用之前没有进行初始化)的出现,我们声明一个指针后最好马上对其进行初始化操作。如果暂时不明确该指针指向哪个变量,则需要赋予NULL值。除了NULL之外,C++11新标准中又引入...转载 2018-08-25 22:32:26 · 418 阅读 · 0 评论 -
C++11 bind注意事项(传引用参数的时候)
默认情况下,bind的那些不是占位符的参数被拷贝到bind返回的可调用对象中。当需要把对象传到bind中的参数中时,需要使用ref或者cref。例如:原创 2018-08-28 18:45:08 · 3763 阅读 · 0 评论 -
boost库在ubuntu下的安装
系统是ubuntu虚拟机,安装的是boost_1_60_0。(1)首先去下载最新的boost代码包,网址www.boost.org。(2)进入到自己的目录,解压:bzip2 -d boost_1_60_0.tar.bz2tar xvf boost_1_60_0.tar(3)之后进入boost目录cd boost_1_60_0/./bootstrap.sh之后会产生bja原创 2017-07-03 18:00:15 · 639 阅读 · 0 评论 -
boost中bind的使用
最近对boost的bind部分比较感兴趣,对其背后的机制进行了简单的分析,和大家分享一下。注,我所看的代码是boost_1_64_0, 想来各个版本的差异不大。定义函数[cpp] view plain copyint f(int a, int b) { return a + b; }原创 2017-07-04 17:34:05 · 2453 阅读 · 0 评论 -
boost::function的用法(一)
boost::function的用法本片文章主要介绍boost::function的用法。 boost::function 就是一个函数的包装器(function wrapper),用来定义函数对象。1. 介绍 Boost.Function 库包含了一个类族的函数对象的包装。它的概念很像广义上的回调函数。其有着和函数指针相同的特性但是又包含了一个调用的接口。一个原创 2017-07-04 16:14:03 · 1568 阅读 · 0 评论 -
boost::function的用法(二)
boost function是一组类和模板组合,用于包装各种函数。从功能上,它类似于函数指针,但是比函数指针的功能更强大。使用boost function,必须包含头文件[cpp] view plain copy#include 除了头文件外,不需要额外的库。注意,boost function有两种形式原创 2017-07-04 19:37:28 · 751 阅读 · 0 评论 -
boost.asio防止恶意空连接的方法
转载:http://blog.csdn.net/educast/article/details/13167847网络服务器通常要应对一些意外情况,如空连接行为,指在遇到客户端连接后不进行任何操作,并很可能在大量空连接情况下导致服务器资源耗尽而无法工作。以下代码主要工作在连接后首次接收客户端消息的环节添加一个timer,并在指定时间后检测是否已接收到消息(验证转载 2017-07-06 19:43:20 · 481 阅读 · 0 评论 -
基于boost asio实现的支持ssl的通用socket框架
情景分析 现已存在一个可用稳定的异步客户端类http_client_base,该类基于boost asio实现了连接服务器,发送请求,获取响应和解析http数据等操作,该类的大致实现框架如下 1class http_client_base 2{ 3public: 4 http_client_base(boost::asio::io_service& i转载 2017-07-06 19:56:58 · 1914 阅读 · 0 评论 -
asio strand的优点及strand与mutex的比较
void strand_service::do_post(implementation_type& impl, operation* op, bool is_continuation) { impl->mutex_.lock(); if (impl->locked_) { // Some other handler already h转载 2018-01-29 12:15:41 · 1272 阅读 · 0 评论 -
boost库中mutex、condition_variable与mutex::scoped_lock联合使用实现线程之间的通信
最近在公司负责一个线程池的模块,里面用到了boost库中的mutex、condition_variable与mutex::scoped_lock,现在将代码拷贝如下:classCondition{public:Condition():count(0){}virtual~Condition(){}voidIncrease(){boost::mute...原创 2018-08-03 20:01:34 · 1182 阅读 · 1 评论 -
boost库学习入门篇
学习及使用Boost库已经有一段时间了,Boost为我的日常开发中带来了极大的方便,也使得我越来越依赖于boost库了。但boost功能太多,每次使用还是得翻看以前的资料,所以为了以后可以更方便的使用,在此对常用的功能作一个总结,也希望以此与大家共勉。boost库下载,Svn地址: http://svn.boost.org/svn/boost/trunk编译源码编译boos原创 2017-07-03 16:33:26 · 1760 阅读 · 0 评论