share_ptr
1、为了保证不会重复释放内存,auto_ptr的copy构造和copy赋值都是破坏性操作,执行后,导致右操作数的指针为0。这就出现了,copy构造或者copy赋值后,两个对象不相等了。
2、auto_ptr的问题就是,一块内存只能有一个指针指向它,为了解决这个问题,使用share_ptr。
3、share_ptr是如何实现的?
a、内部有一个指向原始资源的指针。
b、内部维护一个share_count,记录有多少个指针指向该内存。
c、析构的时候,share_count>1,将计数减1;share_count==1释放内存。
d、考虑到每个share_ptr中都有一个自己的share_count,而且还要保证这个数一致,应该这样做:先对原始资源封装,加入share_count,成为带有count的资源,share_count在对它封装,这样就可以只有一个share_count了。
e、copy构造的时候,lhs的指针指向rhs的资源,share_count加1。
f、copy赋值的时候,先检查左操作数原来的资源是否可以释放,lhs的指针指向rhs的资源,share_count加1。
share_ptr的更多相关文章
- 为了异常安全(swap,share_ptr)——Effecive C++
互斥锁: 假设我们要在多线程中实现背景图片的控制: class PrettyMenu{ public: -- void changeBackground(std::istream& imgSr ...
- 【校招面试 之 C/C++】第26题 C++ 智能指针(二)之 share_ptr
1.综述 shared_ptr 是一个标准的共享所有权的智能指针, 允许多个指针指向同一个对象. 定义在 memory 文件中(非memory.h), 命名空间为 std. shared_ptr 是为 ...
- 智能指针share_ptr记录
shared_ptr 是一个共享所有权的智能指针,允许多个指针指向同一个对象.shared_ptr 对象除了包括一个对象的指针,还包括一个引用计数器.当每给对象分配一个share_ptr的时候,引用计 ...
- 初识boost之boost::share_ptr用法
boost中提供了几种智能指针方法:scoped_ptr shared_ptr intrusive_ptr weak_ptr,而标准库中提供的智能指针为auto_ptr. 这其中,我最喜欢,使用最多的 ...
- boost::share_ptr用法
boost中提供了几种智能指针方法:scoped_ptr shared_ptr intrusive_ptr weak_ptr,而标准库中提供的智能指针为auto_ptr. 这其中,我最喜欢,使用最多的 ...
- C++11智能指针 share_ptr,unique_ptr,weak_ptr用法
0x01 智能指针简介 所谓智能指针(smart pointer)就是智能/自动化的管理指针所指向的动态资源的释放.它是存储指向动态分配(堆)对象指针的类,用于生存期控制,能够确保自动正确的销毁动 ...
- auto_ptr & share_ptr & unique_ptr
Using auto_ptr, you don’t need think about the memory deallocation, but there are also many argument ...
- c++之boost share_ptr
转载:https://www.cnblogs.com/welkinwalker/archive/2011/10/20/2218804.html
- C++11学习之share_ptr和weak_ptr
一.shared_ptr学习 1.shared_ptr和weak_ptr 基础概念 shared_ptr与weak_ptr智能指针均是C++ RAII的一种应用,可用于动态资源管理 shared_pt ...
随机推荐
- Dfs【P2052】 [NOI2011]道路修建
Description 在 W 星球上有 n 个国家.为了各自国家的经济发展,他们决定在各个国家 之间建设双向道路使得国家之间连通.但是每个国家的国王都很吝啬,他们只愿 意修建恰好 n – 1条双向道 ...
- 【BZOJ 4148】 4148: [AMPPZ2014]Pillars (乱搞)
4148: [AMPPZ2014]Pillars Time Limit: 5 Sec Memory Limit: 256 MBSec Special JudgeSubmit: 100 Solve ...
- 可以在GitHub或者码云里 直接搜索 项目 比如 哔哩哔哩
韩梦飞沙 韩亚飞 313134555@qq.com yue31313 han_meng_fei_sha Search · 哔哩哔哩 哔哩哔哩 · 搜索 - 码云 还有就是 以前的项目 可以不要 ...
- hust 1590 - 方块游戏 数学
1590 - 方块游戏 Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.hust.edu.cn/problem/show/1590 D ...
- When to use static method in a java class
First , please understand its feature : * no need to instantiate a instance, i.e. simply you can jus ...
- HDU 4681 String(2013多校8 1006题 DP)
String Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others)Total Subm ...
- Hyper-v: Snapshot merge
我有一个Hyper-V上的虚拟机, 在使用的过程中我给这个虚拟机创建了多个snapshots. 有一天我把整个的snapshots tree从root删掉了(delete snapshot with ...
- JMeter压力测试和性能测试工具
Apache JMeter是Apache组织开发的基于Java的压力测试工具.用于对软件做压力测试,它最初被设计用于Web应用测 试但后来扩展到其他测试领域. 它可以用于测试静态和动态资源例如静态文件 ...
- Error: Finish can only be called once
Android studio 启动或者新建项目:报错“Error: Finish can only be called once” gradle缓存问题: 默认的额缓存路径在: on windows ...
- CRF,没完全看懂
这篇文章,感觉讲的还比较浅显易懂: http://www.sohu.com/a/207085690_206784