Boost程序库完全开发指南——阅读笔记

本文详细介绍了Boost库中的smartpointer特性,包括scoped_ptr的严格所有权管理,shared_ptr的构造函数、make_shared、删除器和别名构造函数,以及weak_ptr的特性和pool的不同类型。还探讨了noncopyable类的使用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.2.1 boost安装
推荐一键式安装
下载: 官网下载地址
(1)安装boost:解压后在Boost根目录下,执行./bootstrap.sh完毕后执行./b2 install,可以查看“/usr/local/include"以及”/usr/local/lib中是否有相应的头文件和库文件,来验证是否安装成功
(2)安装b2:解压后在Boost根目录下,执行cd tools/build/,执行./bootstrap.sh完毕后,执行./b2 install,b2会被默认安装到"/usr/local/bin目录下
(3)常用的b2命令
常用命令

  1. 第二章主要讲的是timer库,个人认为不是很好用

  2. 内存管理
    3.2 scoped_ptr:跟unique_ptr类似,但是其对于所有权更加严格,且智能在本作用域里使用,不能被转让。
    scoped_ptr类摘要
    scoped_ptrstd::stringsp(new string(“test”));// 构造一个scoped_ptr对象
    assert(sp);//使用显式bool转型
    assert(ap!=nullptr);//空指针比较操作
    std::cout<<sp<<std::endl; //operatyor取字符串的内容
    std::cout<size()<std::endl;//operatyor-取字符串的长度
    3.3 shared_ptr
    (1)类摘要
    shared_ptr类摘要
    (2)构造函数
    shared_ptr():
    shared_ptr(Yp);
    shared_ptr(shared_ptr const&r);
    shared_ptr(Y
    p,D d);
    (3)shared_ptr提供了一个工厂函数make_shared()消除显示的new调用
    工厂函数
    auto sp = make_sharedstd::string(“make_shared”);//创建string的共享指针
    auto spv = make_shared<vector>(10,2);//创建vector的共享指针
    assert(spv->size()==10);
    typedef vector<shared_ptr>vs;// 一个持有shared_ptr的标准容器类型
    vs v(10);//声明一个拥有10个元素的容器,元素被初始化为空指针
    (4)应用于桥接模式和工厂模式
    应用于桥接模式
    工厂模式:

#pragma once
#include <iostream>
#include <boost/smart_ptr.hpp>
// 定义抽象工厂类
class Abstract {
public:
    virtual void f() = 0;
    virtual void g() = 0;
protected:
    virtual ~Abstract() = default;
};

class Impl :public Abstract
{
public:
    Impl() = default;
    virtual ~Impl() = default;
public:
    virtual void f() {
        std::cout << "class impl f" << std::endl;
    }
    virtual void g() {
        std::cout << "class impl g" << std::endl;
    }

};

boost::shared_ptr<Abstract>create() {
    return boost::make_shared<Impl>();
}

int main()
{
    auto p = create();
    p->f();
    p->g();
    return 0;
}

(5)定制删除器
shared_ptr(Yp, D d);//第一个参数是被管理的指针,第二个则是告诉shared_ptr在析构时不要使用delete来操作指针p,而是用d来操作,即把delete p换成d§。
定制删除器示例
(6)指针转型函数
static_pointer_cast()
const_pointer_cast()
dynamic_pointer_cast()
(7)别名构造函数:
template
shared_ptr(shared_ptrconst&r,element_type
p);
举例:

auto p1 = make_shared<std::pair<int,int>>(0,1);
shared_ptr<int> p2(p1, &p1->second);

p1 是一个指向 std::pair<int, int> 对象的 shared_ptr,其中这个对象包含了两个整数值,分别是 0 和 1。
p2 是一个指向整数的 shared_ptr,它的构造函数接受两个参数。第一个参数是一个 shared_ptr 对象,用于共享资源的所有权,即 p2 将共享 p1 所指向的资源。第二个参数是一个原始指针,它指向被共享资源中的某个成员。在这里,&p1->second 是取得 p1 所指向的 std::pair 对象中第二个元素的地址,即整数值 1 的地址。
因此,p1 指向 std::pair<int, int>(0, 1),而 p2 指向 p1 所指向的 std::pair 对象中的第二个整数值,即整数值 1。两者的引用计相同,但指向的内容不同。
(8)owner_less:基于所有权的比较函数
owner_less

3.4 weak_ptr
没有重载operator*和->,不共享指针,不能操作资源,不会引起引用计数的增加或减少
用法示例

3.5 pool
只能作为普通数据类型的内存池,不能将其应用于复杂的类和对象,因为它只分配内存,不调用构造函数;

3.6 object_pool
3.7 singleton_pool:可以理解为就是一个静态的pool

  1. 实用工具
    4.1 noncopyable
    class do_not_copy:boost::noncopyable{…};
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值