- 浏览: 775789 次
- 性别:
- 来自: 深圳
文章分类
- 全部博客 (1045)
- 数据结构 (36)
- UML与设计模式 (42)
- c++ (87)
- rust (36)
- Qt (41)
- boost模板元编程 (43)
- Linux (77)
- 汇编 (4)
- 其它 (2)
- 烹饪 (3)
- unix c / socket (73)
- 软件工程 (4)
- shell (53)
- Python (37)
- c++ primer 5th(c++11) (22)
- 数据库/MySQL (27)
- 数据存储 (4)
- lisp (7)
- git (4)
- Utility (3)
- CDN与DNS (54)
- Http (53)
- php (7)
- nginx/lua/openresty (41)
- redis (11)
- TCP/IP (16)
- 互联网 (6)
- kernel (2)
- go (34)
- 区块链 (43)
- 比特股 (13)
- 以太坊 (23)
- 比特币 (23)
- 密码学 (10)
- EOS (53)
- DAG (1)
- docker (1)
- filecoin (7)
- solidity (65)
- ipfs (8)
- 零知识证明 (1)
- openzeppelin (3)
- java (1)
- defi (7)
- Ton (0)
最新评论
weak_ptr是为配合shared_ptr而引入的一种智能指针来协助shared_ptr工作,它可以从一个shared_ptr或另一个weak_ptr对象构造,它的构造和析构不会引起引用记数的增加或减少。没有重载*和->但可以使用lock获得一个可用的shared_ptr对象
weak_ptr的一个重要用途是通过lock获得this指针的shared_ptr,使对象自己能够生产shared_ptr来管理自己,但助手类enable_shared_from_this的shared_from_this会返回this的shared_ptr,只需要让想被shared_ptr管理的类从它继承即可
template<class T> class weak_ptr { public: weak_ptr(); template<class Y> weak_ptr(shared_ptr<Y> const & r); weak_ptr(weak_ptr const & r); ~weak_ptr(); weak_ptr & operator=(weak_ptr const & r); long use_count()const; //判断是否过期 bool expired()const; //得到一个空的或者被协助的shared_ptr shared_ptr<T> lock()const; void reset(); void swap(weak_ptr<T> & b); };
#include<iostream> #include<boost/weak_ptr.hpp> #include<boost/shared_ptr.hpp> using namespace std; using namespace boost; int main() { shared_ptr<int> p(new int(10)); weak_ptr<int> w(p); while(!w.expired()){ cout << w.use_count() << endl; shared_ptr<int> t = w.lock(); cout << *t << endl; cout << w.use_count() << endl; if(w.use_count()==2){ break; } } w.reset(); cout << w.expired() << endl; } 1 10 2 1
weak_ptr的一个重要用途是通过lock获得this指针的shared_ptr,使对象自己能够生产shared_ptr来管理自己,但助手类enable_shared_from_this的shared_from_this会返回this的shared_ptr,只需要让想被shared_ptr管理的类从它继承即可
#include<boost/enable_shared_from_this.hpp> #include<boost/make_shared.hpp> #include<iostream> using namespace boost; using namespace std; class testWeak:public enable_shared_from_this<testWeak>{// public: int i; testWeak(int ii):i(ii){} void print(){ cout << i << endl; } }; int main() { shared_ptr<testWeak> sp = make_shared<testWeak>(100); shared_ptr<testWeak> tw = sp->shared_from_this(); tw->print(); } 100
发表评论
-
multi_index_container
2018-08-11 13:04 466根据不同的类中不同的字段排序 #include < ... -
program_options读命令行和配置文件
2018-07-27 11:30 880#include <boost/program_opti ... -
centos下boost安装
2014-03-27 09:28 1079./booststarp.sh //这里的一些错误不用管 ... -
GC的改良
2013-10-17 22:05 589分代回收:对分配不久,诞生时间较短的“年龄”对象进行重点扫描, ... -
GC与引用记数
2013-10-16 21:57 706根(Root)就是判断对象是否可被引用的起始点。至于哪里才是根 ... -
boost 信号槽
2011-06-08 23:43 2336#include<boost/signals2.hp ... -
boost bind
2011-06-07 15:28 1698bind并不是一个单独的类或函数,而是非常庞大的家族,依据绑定 ... -
boost reference_wrapper
2011-06-05 21:07 1575reference_wrapper是一个引用类型的包装器 ... -
元编程
2011-06-02 22:46 945元编程的最大特点在于:某些用户自定义的计算可以在程序翻译期进行 ... -
参数化虚拟性
2011-06-02 22:17 874#include<iostream> usi ... -
boost any与variant
2011-05-31 15:55 2442any:是一种只能容纳一个元素的容器,但这个元素可以是任意类型 ... -
traits
2011-05-30 16:43 802#include<iostream> usi ... -
动静多态
2011-05-30 15:40 1080由于继承||虚函数在运行期进程处理,这种多态叫动多态。 模板允 ... -
局部特化
2011-05-29 16:27 1043局部特化并不会引入一个新的模板,它只对原来模板(基本模板)进行 ... -
类模板与模板类
2011-05-29 16:08 7141.类模板:该类是一个模板,他代表的是:整个类家族的参数化描述 ... -
boost tuple
2011-05-27 15:03 1098tuple(元组):定义了一个有固定数目元素的容器,其中的每个 ... -
boost array
2011-05-27 00:06 943array本质上是一个对静态数组的包装,没有构造函数,不能指定 ... -
单元测试
2011-05-23 22:00 902test库提供了一个最小化的测试套件minimal test. ... -
boost StaticAssert
2011-05-23 21:42 949static_assert库把断言的诊断时刻由运行期提前到编译 ... -
boost正则表达式
2011-05-17 23:10 2812xpressive是boost的正则表达式库,它比boost. ...
相关推荐
在 C++ 中,有四种智能指针:auto_ptr、unique_ptr、shared_ptr 和 weak_ptr,每种智能指针都有其特点和使用场景。 一、auto_ptr auto_ptr 是 C++98 中引入的智能指针,它可以自动释放动态分配的内存。但是,auto_...
C++ 智能指针(shared_ptr/weak_ptr)源码 源码位置:gcc-6.1.0\gcc-6.1.0\libstdc++-v3\include\tr1 这里只单列shared_ptr.h文件用于分析
本文主要讨论了三种智能指针:`shared_ptr`、`unique_ptr`和`weak_ptr`。 首先,`shared_ptr`是引用计数型智能指针,它维护了一个内部的引用计数,用于跟踪有多少个`shared_ptr`实例指向同一对象。当创建一个新的`...
其中,`weak_ptr`是为了解决`shared_ptr`中可能出现的循环引用问题而引入的一种特殊类型的智能指针。本文将深入探讨`weak_ptr`的概念、用途及其使用方法。 1. 为什么需要`weak_ptr`? `shared_ptr`是C++11中引入的...
std::weak_ptr<int> weak_ptr(ptr); if (std::shared_ptr<int> strong_ptr = weak_ptr.lock()) { // 对象仍然有效,可以使用strong_ptr } else { // 对象已被销毁,不能使用 } ``` 在"test_share_ptr"项目中,...
【Boost智能指针详解:scoped_ptr、shared_ptr与weak_ptr】 智能指针是C++中用来自动管理动态分配内存的对象,它可以确保在适当的时间释放内存,以防止内存泄漏。Boost库提供了一组智能指针类型,包括scoped_ptr、...
3. 从原始指针转换:`std::shared_ptr<T> ptrRaw(ptr_raw);`,其中`ptr_raw`是原始指针。 4. 从另一个`shared_ptr`复制:`std::shared_ptr<T> ptrCopy(ptrOther);`,这样两个`shared_ptr`将共享相同的引用计数。 ...
`shared_ptr`和`weak_ptr`是两种常见的智能指针类型,分别代表了强引用和弱引用的概念。 `shared_ptr`是C++11引入的一种智能指针,它管理一个动态分配的对象,并在不再有引用指向该对象时自动删除它。`shared_ptr`...
`unique_ptr`的删除器通常在构造函数中指定,而`shared_ptr`的删除器可以通过弱指针(`weak_ptr`)共享,以确保即使所有`shared_ptr`都失效后,仍能正确释放资源。 3. **构造函数和赋值操作符**:为了创建和操作...
std::shared_ptr 和 std::weak_ptr 在 C++ 的内存管理和对象生命周期控制方面发挥着重要作用。std::shared_ptr 通过引用计数实现了对象所有权的共享,使得多个智能指针可以安全地指向同一个对象,并且在最后一个引用...
- **可与`std::weak_ptr`配合使用**:`std::weak_ptr`不增加引用计数,用于防止循环引用问题。 #### shared_ptr只能对new的内存操作 如标题所示,“shared_ptr只能对new的内存操作”这一说法强调了`std::shared_...
在智能指针家族中,`shared_ptr`和`weak_ptr`是TR1(Technical Report 1)的一部分,也被称为Boost库的一部分,并被整合到了C++11标准中。 ### shared_ptr `shared_ptr`是一种引用计数智能指针,当一个`shared_ptr...
在C++中,标准库提供了几种智能指针类型,如`std::unique_ptr`、`std::shared_ptr`和`std::weak_ptr`。这些智能指针在析构时会自动调用所指对象的析构函数,从而释放内存。 2. **自定义智能指针`count_ptr`**: ...
3. **std::weak_ptr**:std::weak_ptr是std::shared_ptr的辅助类,它不增加对象的引用计数,而是保持对对象的弱引用。这避免了循环引用的问题,当对象被所有std::shared_ptr释放后,std::weak_ptr尝试访问对象时会抛...
`weak_ptr`可以作为观察者,当`shared_ptr`引用计数为零时,`weak_ptr`可以通过尝试转换为`shared_ptr`来检测对象是否已经被删除。如果对象仍然存在,`weak_ptr::lock()`方法可以返回一个新的`shared_ptr`,否则返回...
重点掌握 unique_ptr 原理,shared_ptr 原理(引用计数管理方法),weak_ptr 与 shared_ptr的区别:weak_ptr是为了配合shared_ptr而引入的一种智能指针,它指向一个由shared_ptr管理的对象而不影响所指对象的生命...
当 `shared_ptr` 的引用计数降为零时,即使还有 `weak_ptr` 存在,对象也会被删除。`weak_ptr` 需要先转换为 `shared_ptr` 才能访问对象。 7. **自定义删除器** 可以通过传递自定义的删除器给 `shared_ptr` 构造...