weak_ptr可以使用一个非常重要的成员函数lock()从被观测的shared_ptr获得一个可用的shared_ptr对象 #include<iostream>#include<memory>std::weak_ptr<int> gw;voidobserve(){std::cout<<"use_count == "<< gw.use_count() <<": ";if(autospt = gw.lock()) {// 使用之前必须复制到 shared_ptrstd:...
1.shared_ptr 1.1 shared_ptr介绍 shared_ptr主要用于托管动态分配的内存。 在程序中动态分配了一块内存,这块内存可以是变量可以是对象,为了避免内存泄露,我们必须在整个程序的所有可能跑到的分支,保证这块内存不用了之后可以得到正确的释放。 普通指针使用起来麻烦,而且使用不当还很有可能出现程序崩溃,比如指针未释放导...
// 定义普通指针pint*p=newint(10);// 通过普通指针创建智能指针astd::shared_ptr<int>a(p);// 如果此时删除原始指针p,后面智能指针a则会出现异常deletep; 1.2 通过make_shared进行初始化 std::shared_ptr<int>a=std::make_shared<int>(10);std::cout<<*a<<"\n"; 1.3 通过另一个智能指针进行初始...
shared_ptr像普通指针一样使用,可以将*和->与 shared_ptr 对象一起使用,也可以像其他 shared_ptr 对象一样进行比较; 三shared_ptr的使用 3.1.构造函数创建 1.shared_ptr<T> ptr;//ptr 的意义就相当于一个 NULL 指针 2.shared_ptr<T> ptr(new T());//从new操作符的返回值构造 3.shared_ptr<T> ptr...
shared_ptr的用法 从名字上看shared_ptr是共享指针,意味着我们可以复制shared_ptr,复制出的智能指针指向同一个内部数据指针(即被智能指针包装的真正数据)。 构造shared_ptr 有多种方法可以构造shared_ptr,下面代码中有4种构造方式: int *p = new int(1); ...
weak_ptr 是为了配合shared_ptr而引入的一种智能指针,没有重载operator*和->,它的最大作用在于协助shared_ptr工作,像旁观者那样观测资源的使用情况。 weak_ptr可以从一个shared_ptr或者另一个weak_ptr对象构造,获得资源的观测权。但weak_ptr没有共享资源,它的构造不会引起指针引用计数的增加。
收起 A. 逐一分析 1. 原始指针 2.shared_ptr 3.unique_ptr B. 代码示例 1.原始指针 2.shared_...
shared_ptr的产生与unique_ptr类似,都是为了解决raw pointer的new和delete的成对使用,导致的野指针、内存泄漏、重复释放内存等。 不过shared_ptr与unique_ptr场景又有所不同,这里主要是一个raw pointer在不同的代码块之间传来传去的场景,或者指针指向的内存比较大,这段内存可以切分成很多小部分,但是他们却需要共享彼...
2.1 std::unique_ptr 2.2 std::shared_ptr 2.3 std::weak_ptr 3. 普通指针 vs. 智能指针:...
删除器因为shared_ptr的删除器是运行时绑定的 所以其类型应该是一个指针 所以我们需要一个函数指针 指向删除器 类的类型这是一个典型的类指针的类 有共用一个指针 其实使用智能指针存储是最优的 但是我们就是在实现智能指针嘛 所以就操作普通指针就好