Boost库--指针容器

指针容器

1】指针容器和标准容器一一对应,指针容器由标准容器和容器适配器实现的。
例如:
vector<void *>+适配器 实现出ptr-vector   。
ptr_vector基于标准容器vector,大部分操作都转发给内部的容器实现。但构造函数ptr_vector(n)的行为不同于vector,它不会创建n个元素,而是
保留n个元素的空间,相当于调用reserve(n).
同理:
queue<void*>+适配器实现出指针容器ptr_queue;
2】指针容器还实现了STL中没有标准容器与之对应的指针容器,如ptr_array,ptr_circular_buffer等;
3】可以和assign库搭配;
4】可以和标准算法搭配。
     Boost库--指针容器_第1张图片
5】copy的覆盖语义
        Boost库--指针容器_第2张图片

1/容纳指针
typedef ptr_vector<string>ptr_vec;
ptr_vec vec;
vec.push_back(new string("123"));
vec.push_back(new string("abc"));
容器存指针不方便
vector<string*>vec;
vec.push_back(new string("123"));
vec.push_back(new string("abc"));
*vec.back()="abc";
assert(*vec[1]=="abc");
2/与标准容器不同:指针所有权的转移

 指针的所有权是唯一的。

         Boost库--指针容器_第3张图片

3/优点:
1)直接在容器中存储动态对象,不须关心生存周期问题,不会内存泄露;
2)没有智能指针的引用计数,执行效率更高;
3)只存储原始指针,指针容器对元素的要求很低,可以存储不可拷贝构造,缺省构造和赋值的类型---这些类型是标准容器无法容纳的。
4)可以存储抽象类,即可以是多态的容器。
缺点:
1)指针的所有权是专有的,没有智能指针容器灵活;
2)部分标准算法不能用于指针容器(但提供了等价的成员函数)
4/使用场合
不得不动态创建对象(类型不可拷贝)+需要使用容器来管理对象+不需要共享对象的所有权

以上内容摘录自:《Boost程序库探秘——深度解析C++准标准库》第5章 指针容器

你可能感兴趣的:(Boost库--指针容器)