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

news/2024/7/20 15:59:38 标签: boost, 内存管理

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[ ]返回的原始指针










http://www.niftyadmin.cn/n/1306879.html

相关文章

multisim中轻触开关在哪_轻触开关的使用细节和应用范围是什么?

点击上方蓝字关注「安装工程造价学习」每天推送轻触开关有接触电阻荷小、操作力误差小、规格多样化等方面的优势&#xff0c;因此轻触开关在电子设备及白色家电等方面得到广泛的应用如&#xff1a;影音产品、数码产品、通讯产品、家用电器、安防产品、玩具、电脑产品、健身器材…

Boost库学习笔记-----------实用工具之禁止复制 noncopyable

1.定义类时&#xff0c;如果我们不显示生命复制构造函数和赋值操作符编译器会默认为我们生成&#xff0c;如果想禁止复制&#xff0c;只需要私有 化复制构造函数和赋值操作符。 2.使用Boost库中的noncopyable能很好的减少我们的工作&#xff0c;如果每个类不想被复制&#…

添加编译宏_发布Qml宏预处理工具

​为Qml提供部分简单的预处理命令。0x00 初衷在不改变和影响原有语法的前提下提高qml开发效率。有一些qml项目兼顾与Qt4与Qt5版本&#xff0c;由于QML不用编译&#xff0c;但解释在运行时&#xff0c;使预处理指令不能用于直接通过QML。一般采用的方法是直接改文件内容&#xf…

Boost库学习----timer

1.timer是一个很实用的小工具&#xff0c;而且十分简单&#xff0c;源码也十分简洁&#xff0c;主要是使用了标准库中的std::clock()实现的 例子&#xff1a; timer t; ......... .......... cout<<"time elapsed"<<t.elapsed()<<"s"&l…

cx_oracle写日志信息_推荐一款纳秒级的C++日志工具Nanolog

本文将介绍一款延迟很低吞吐量很高的日志工具Nanolog&#xff0c;该日志系统较其他常用日志系统延迟低一到两个数量级&#xff0c;吞吐量高一到两个数量级。日志在系统中起到非常重要的debug作用&#xff0c;出core后debug离不开日志的帮助。但是一般的日志又比较慢&#xff0c…

Java中list.get(index)报错

1、list.get(index)中的index为负值异常 严重&#xff1a;Exception occurred during processing request:-1 java.lang.ArrayIndexOutOfBoundsException:-1 原因&#xff1a;if(null ! list.get(list.size()-1) && null ! list.get(list.size()-1).getValue()) { } 分…

Boost库学习------progress_timer

1.progress_timer继承自timer&#xff0c;实现了timer的所有功能&#xff0c;但是比timer更加简单&#xff0c;不用显示调用elapsed&#xff08;&#xff09;函数来显示时间间隔&#xff0c;它的析构函数自动调用了elapsed&#xff08;&#xff09;,也就是说当它创建后到析构这…

XAJAX简介以及Marco的更多作品

Marco, this great guy and talented web-dev from Netherlands (spelled ?????&#xfffd;?&#xfffd;???????? in Bulgarian, as in Holland), has a great intro to xajax. If youre browsing around to pick an AJAX library that suits you best, this i…