C++智能指针
来源:互联网 发布:js设置div背景图片 编辑:程序博客网 时间:2024/06/01 09:19
1、unique_ptr
与所指对象内存绑定紧密不能与其他unique_ptr对象共享对象内存。
所有权可以通过move()对其进行转让, 一旦转让,原有的指针失去了对内存的所有权
unique_ptr<int> up1(new int(11));
unique_ptr<int> up2 = up1; //不能复制,编译报错,没有拷贝构造函数,但保留移动构造函数
unique_ptr<int> up3 = move(up1); //移动语义
2、shared_ptr
采用引用计数,允许多个对象共享的拥有内存,有一个对象释放了只是引用计数降低了内存并没有释放, 只有引用计数变为0时才会释放内存。
shared_ptr<int> sp1(new int(12));
shared_ptr<int> sp2 = sp1; //共享内存
std::cout << *sp1;
std::cout << *sp2;
sp1.reset(); //只是导致了引用计数的降低,不影响sp2的使用。
std::cout << sp2;
3、 weak_ptr
//使用weak_ptr的成员lock,可返回指向shared_ptr指针指向对象的内存,却并不拥有此内存。
weak_ptr<int> wp = sp1; //指向shared_ptr<int>所指对象,但不拥有内存
如果堆空间时效, 则返回一个指针空值nullptr;
4、垃圾回收机制
1、基于引用计数的垃圾回收机制:
当一个对象的引用计数变为0时,该对象即可视作“垃圾”而回收。
2、基于跟踪处理的垃圾回收机制:
相对于引用计数,跟踪处理机制有更广泛的应用。其基本方法是产生跟踪对象关系图,然后进行垃圾回收。
(1)标记-清除
这个算法分为两个过程。将当前使用对象作为根对象,从根对象查找他们的引用堆空间,并做标记。
标记完成的对象叫可达对象或活对象,没有标记的对象被认为是垃圾,第二部,将其回收清除。
特点是:对象不会移动,存在内存碎片
(2)标记-整理
标记完成后不清除,而是将活对象向左靠齐,这就解决了内存碎片的问题。
特点是:移动活对象。所以程序中所有堆内存的引用都必须更新。
(3)标记-拷贝 不多做解释了。
- c++:智能指针
- C++:智能指针
- 【C++】智能指针
- 【C++】智能指针
- C++PJ智能指针
- 【c++】智能指针
- 【C++】智能指针auto_ptr
- C++,智能指针
- C++,boost智能指针
- 智能指针模拟C
- [C++]智能指针
- 【C++】 浅析智能指针
- C++_智能指针
- C++:初识智能指针
- C++::智能指针
- 【C++】智能指针
- c智能指针:unique_ptr
- 【C++】智能指针
- Codevs 1245 最小的N个和
- 解决@NotNull parameter 'name' of com/android/tools/idea/welcome/Platform.<init> must not be null问题
- GO的路径问题
- linux彻底清除history命令
- 详解大数据数据仓库分层架构
- C++智能指针
- jmeter学习—003——使用CSV Data Set Config参数化数据不重复的多次循环执行(实现多用户多笔投资不同项目功能)
- php 冒泡排序
- sublime 的Bracket Highlighter插件配置文件
- 日本比特币交易所将从10月开始接受监管
- 每日区块链:欧洲最大港口成立区块链研究实验室;塞拉利昂重点发展国家区块链计划
- QTableWidget的详细设置
- CommonsMultipartResolver进行文件上传
- 滚动到锚点