本文是基于gcc-4.9.0的源代码进行分析,shared_ptr和weak_ptr是C++11才加入标准的,所以低版本的gcc源码是没有shared_ptr和weak_ptr的,建议选择4.9.0或更新的版本去学习,不同版本的gcc源码差异应该不小,但是原理和设计思想的一样的,下面给出源码下载地址http://ftp.gnu.org/gnu/gcc 3、智能指针概念 智能指针(S...
从名字上看,weak_ptr是弱指针,即它比shared_ptr要弱一点。weak_ptr可以看做shared_ptr的助手,weak_ptr要和shared_ptr配套一起使用。当创建一个weak_ptr时,要用一个shared_ptr来初始化它。 我们知道,复制shared_ptr是会增加内部数据的引用计数,但是复制weak_ptr时,以及由shared_ptr构造weak_ptr时,是不会增加引...
C++里面的四个智能指针: ~~auto_ptr~~,unique_ptr,shared_ptr, weak_ptr 其中后三个是C++11支持,并且第一个已经被C++11弃用。 shared_ptr共享对象的所有权,但性能略差。 unique_ptr独占对象的所有权,由于没有引用计数,因此性能较好。 weak_ptr配合shared_ptr,解决循环引用的问题。 2. shared_ptr 2.1 shared...
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:...
使用shared_ptr 时, 如果存在循环引用, 将导致内存泄露.weak_ptr指针 是为配合 shared_ptr 而引入的一种智能指针来协助 shared_ptr 工作, 它只可以从一个 shared_ptr 或另一个 weak_ptr 对象构造, 它的构造和析构不会引起引用记数的增加或减少.
"<<std::endl;std::unique_ptr<AA>p0(newAA("西施0"));// 方法一: 分配内存并初始化std::unique_ptr<AA>p1=std::make_unique<AA>("冰冰1");// 方法二: C++14标准。std::cout<<"智能指针调用p1->m_name: "<<p1->m_name<<std::endl;// 2)用nullptr给unique_ptr赋值将释放对象,空的...
std::weak_ptr:弱引用的智能指针,它不共享指针,不能操作资源,是用来监视 shared_ptr 的。 2.基本使用方法 弱引用智能指针 std::weak_ptr 可以看做是 shared_ptr 的助手,它不管理 shared_ptr 内部的指针。 std::weak_ptr 没有重载操作符 * 和 ->,因为它不共享指针,不能操作资源,所以它的构造不会增加引...
编译错误,unique_ptr 不能被复制 的实现原理 是为了配合 shared_ptr 而引入的一种智能指针,它指向由 shared_ptr 管理的对象,但不影响对象的生命周期。通过 weak_ptr,我们可以解决 shared_ptr 的循环引用问题,避免内存泄漏。 通过shared_ptr 来创建,但不增加引用计数。当需要访问 weak_ptr 指向的对象时,可以通过...
weak_ptr引入可以解决shared_ptr交叉引用时无法释放资源的问题。 示例代码: #include<iostream>#include<memory>usingnamespacestd;classB;classA{public:A(){cout <<"A constructor ... "<< endl;} ~A(){cout <<"A destructor ..."<< endl;} ...
std::unique_ptr<Student> unque_p2(std::move(unique_p)); // 移动构造可以,让unique_p为空2.shared_ptr: 内存由多个指针变量共同使用,共同拥有内存的所有权,但是必须杜绝循环拷贝!并且shared_ptr 需要维护的信息有两部分:指向共享资源的指针;引用计数等共享资源的控制信息——维护一个指向控制信息的指针。Stu...