Boost库学习笔记-------内存管理

来源:互联网 发布:php get不到数据 编辑:程序博客网 时间:2024/05/21 11:15

1.scoped_ptr

 1.1 类似于标准库中的auto_ptr,区别是一旦获取指针所有权,就不在交出去。

       实现机制:赋值运算符与赋值运算都声明为private 

       auto_ptr<int> autoPtr1(new int(10));

       auto_ptr<int> autoPtr2;

       autoPtr2=autoPtr1; / /指针所有权发生了转移


       scoped_ptr<int> sp1(autoPtr1); //autoPtr1不在拥有指针所有权

       scoped_ptr<int> sp2=sp1; //错误,不能转移指针所有权


1.2 reset()成员函数废弃拥有的指针。


1.3 get()可以返回原始指针



2.scoped_array


2.1 类似scoped_ptr,只不过初始化时传入的是通过new[ ]生成的指针,解决了标准库中没有管理数组指针的问题。


2,2 提供了operator[ ]运算符重载,可以想操作数组下表一样操作。


2.3在需要动态数组的情况下不能自动增长,推荐使用std::vector,除非系统不支持或对性能要求极高。



3.shared_ptr(最重要的指针)

3.1shared_ptr实现了引用计数的智能指针,可以任意拷贝和复制,当引用计数为0时,自动删除。并且可以用到标准        容器中。

3.2 shared_ptr的reset()函数与scoped_ptr不同,它是将引用计数减一,停止共享,除非为0,否则不会删除指针。


3.3 unique()检查是否唯一拥有指针,如果是返回true。


3.4有专门转型函数与标准库中函数相对应(static_pointer_cast<T>等等)


3.5shard_ptr最接近原始指针


4.工厂函数


4.1为了消除构造shared_ptr时,显示调用new却没有响应的delete显示调用的不对称性,提供了工厂函数                        make_shared<T>()来消除对new的显示调用。make_shared要比直接构造shared_ptr效率高,因为他只进行一次内存分配,消除了shared_ptr构造时的开销。

例: shared_ptr<String> sharPtr=make_shared<String>("hello world");



5.shared_array

5.1 用于数组的智能指针,与shanred_ptr区别在于构造函数需要new[ ]返回的原始指针









原创粉丝点击