boost
文章平均质量分 85
huangjh2018
这个作者很懒,什么都没留下…
展开
-
boost::function用法详解(一)
最近在写代码过程中需要使用boost::function,在此之前并没有接触过boost::function,这里主要记录下对boost::function的学习和理解。boost::function是一个函数对象的“容器”,概念上像是C/C++中函数指针类型的泛化,是一种“智能函数指针”。它以对象的形式封装了原始的函数指针或函数对象,能够容纳任意符合函数签名的可调用对象。因此,它可以被用于回原创 2017-05-03 16:19:23 · 10244 阅读 · 1 评论 -
boost::scoped_ptr智能指针
1. 简介 scoped_ptr是boost库提供的很类似auto_ptr的智能指针,它包装了new操作符在堆上分配的动态对象,能够保证动态创建的对象在任何时候都可以被正确地删除。在实现上都是利用了一个栈上的对象去管理一个堆上的对象,从而使得堆上的对象随着栈上的对象销毁时自动删除。但scoped_ptr的所有权更加严格,不能转让,并且永远不能被复制或赋值,一旦scoped_ptr获取了对象的原创 2017-04-12 13:18:20 · 1844 阅读 · 0 评论 -
boost时间和日期——时间
1. 简介 timer 是boost中一个很小的库,提供简易的度量时间和进度显示功能,可以用于性能测试等需要计时的任务。timer 库包含三个组件,分别是:计时器类timer、progress_timer和进度指示类progress_display。2. 计时器类timer timer 类可以测量时间的流逝,是一个小型的计时器,提供毫秒级别的计时精度和操作函数,供用户使用。原创 2018-01-11 21:32:38 · 2223 阅读 · 4 评论 -
boost::shared_ptr智能指针分析
1. 简介 boost.smart_ptr 库中最有价值、最重要的组成部分,也是最有用的。 shared_ptr 与 scoped_ptr 一样包装了new 操作符在堆上分配的动态对象,但它实现的是引用计数型的智能指针,可以被自由地拷贝和赋值,在任意的地方共享它,当没有代码使用(引用计数为0)它时才删除被包装的动态分配的对象。shared_ptr 也可以安全地放到标准容器中,并弥补了a原创 2018-02-03 11:47:52 · 899 阅读 · 0 评论 -
boost::scoped_array
1.简介 scoped_array很像scoped_ptr,它包装了new[ ]操作符(不是单纯的new)在堆上分配的动态数组,为动态数组提供了一个代理,包装可以正确地释放内存。2. scoped_array 分析 scoped_array 的类摘要如下所示(这里列出重要部分):template class scoped_array // noncopyable{priva原创 2018-01-31 09:17:50 · 1077 阅读 · 0 评论 -
boost::noncopyable 禁止拷贝
当我们定义某个类时,我们可能不希望我们定义的类进行拷贝操作。为此,我们可以采用将拷贝构造和拷贝赋值声明为private(私有)的,这样的话就能禁止类进行拷贝操作。不过,这样做的话,显得比较麻烦。为此,boost中就提供noncopyable,我们通过继承noncopyable就可以实现禁止拷贝了。原创 2017-03-06 22:53:44 · 1008 阅读 · 0 评论 -
BOOST_STATIC_ASSERT和assert的区别
1.assert()函数的作用assert的作用是先计算表达式_Expression,如果其值为假(即为0),那么它会打印出来assert的内容和__FILE__, __LINE__,然后执行abort()函数使kernel杀掉自己并coredump(是否生成coredump文件,取决于系统配置);否则,assert()无任何作用。宏assert()一般用于确认程序的正常操作,其中表达式构造无错时才为真值。完成调试后,不必从源代码中删除assert()语句,因为宏NDEBUG有定义时,宏assert()的原创 2017-06-14 18:34:14 · 1616 阅读 · 0 评论 -
boost::less_than_comparable
在实际的编程过程中,我们有时候需要对自定义的类重载操作运算符,以便可以进行类之间的比较等操作。此时,我们可能就需要重载所需的运算符。 但是重载一个类型的操作符时,保证所有操作符都有重载是一件乏味并容易出错的工作,并且确存在这样的事实:其中一些重载的运算符函数可以通过某个或几个的重载运算符函数得出。举个例子来说:当我们需要重载>、<、>=和<=操作符的时候。如果我们重载了<运算符,那么其实我们通过<就能够确认其他等式。幸运的是,在Boost.Operators中就提供了这种便捷的方法。通过使用Boost原创 2017-07-04 21:11:54 · 1271 阅读 · 0 评论 -
boost::static_pointer_cast、boost::dynamic_pointer_cast和boost::const_pointer_cast
当我们用“裸”指针进行类层次上的上下行转换时,可以使用dynamic_cast。当然我们也可以使用static_cast,只是dynamic_cast在进行下行转换的时候(即基类到派生类)具有类型检查功能,而static_cast没有。因此存在安全问题。当我们使用智能指针时,如果需要进行类层次上的上下行转换时,可以使用boost::static_pointer_cast和boost::dynamic_pointer_cast。(C++11中也支持智能指针和转换,只是命名空间改成std即可)。原创 2017-07-03 21:07:30 · 8254 阅读 · 0 评论 -
程序随笔——timestamp(时间戳)
在实际编程中,经常需要用到时间戳。因此,对Linux上的一些时间API进行封装,实现了个CTimestamp类,该类的内部用一个int64_t类型来存储时间,时间精度为微秒。类重载了比较,提供了转换为字符串的方法。原创 2017-07-12 22:16:06 · 4421 阅读 · 0 评论 -
程序随笔——C++实现的一个线程池
1.线程池简介线程池是一种多线程处理形式,处理过程中我们将相应的任务提交给线程池,线程池会分配对应的工作线程执行任务或存放在任务队列中,等待执行。我们知道在面向对象编程中,创建和销毁对象是需要消耗一定时间的,因为创建一个对象要获取内存资源或者其它更多资源。所以提高服务程序效率的一个手段就是尽可能减少创建和销毁对象的次数,特别是一些很耗资源的对象创建和销毁。如何利用已有对象来服务就是一个原创 2017-06-10 17:02:13 · 593 阅读 · 0 评论 -
boost::weak智能指针
1. 简介 weak_ptr 是为配合 shared_ptrt 而引入的一种智能指针,它更像是 shared_ptr 的一个助手而不是智能指针,因为它不具备普通指针的行为,没有重载 operator * 和 ->。它的最大作用在于协助 shared_ptr 工作,像旁观者那样观测资源的使用情况。 利用 weak_ptr,我们可以解决常见的空悬指针问题和循环引用问题。 空悬指针问题原创 2018-02-06 16:31:00 · 283 阅读 · 0 评论