首页 技术 正文
技术 2022年11月14日
0 收藏 651 点赞 2,457 浏览 83970 个字

body, table{font-family: 微软雅黑; font-size: 10pt}
table{border-collapse: collapse; border: solid gray; border-width: 2px 0 2px 0;}
th{border: 1px solid gray; padding: 4px; background-color: #DDD;}
td{border: 1px solid gray; padding: 4px;}
tr:nth-child(2n){background-color: #f8f8f8;}

资源管理–RAII: 1、RAII(Resource Acquisition Is Initialization)是一种由 C++创造者 Bjarne Stroustrup 提出的, 利用对象生命周期管理程序资源(包括内存、文件句柄、锁等)的技术。 2、使用 RAII 时,一般在资源获得的同时构造对象, 在对象生存期间,资源一直保持有效;对象析构时,资源被释放。 关键:要保证资源的释放顺序与获取顺序严格相反 3、RAII类的常见特征

1、在构造时初始化资源, 或托管已构造的资源 2、析构时释放资源 3、一般不允许复制或赋值(对象语义) 4、提供若干访问资源的方法

4、RAII的本质是用栈对象来管理资源,因为栈对象在离开作用域时,会自动调用析构函数

#include <iostream> #include <stdio.h> #include <string> using namespace std; class SafeFile {         public:                 SafeFile(const string & filename)                 :_fp(fopen(filename.c_str(),"w+"))                 {                         cout<<"fopen(_fp)"<<endl;                         if(NULL == _fp)                         {                                 cout<< "FILE open error"<<endl;                         }                 }                 ~SafeFile()                 {                         if(_fp != NULL)                         {                                 fclose(_fp);                                 cout<< "fclose(_fp) "<<endl;                         }                 }

                void write(const char * str)                 {                         cout<<"write(const char *)"<<endl;                         if(fputs(str,_fp)==EOF)                         {                                 cout<< "write error!" <<endl;                         }                 }         private:                 FILE * _fp;                 SafeFile(const SafeFile & rhs);                 SafeFile & operator = (const SafeFile & rhs); };

int main() {         SafeFile sf("test.txt");         sf.write("hello,world!\n");         return 0; } <img src="data:image/png;base64,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" />

/** **利用一个对象在离开个域中会调用析构函数的特性, **在构造函数中完成初始化,在析构函数中完成清理工作,将需要 **操作和保护的指针作为成员变量放入RAII中。 */

#include<iostream> using namespace std; template<typename T> class RALL {         public:                 RALL(T* p):_p(p)  { cout<<"托管资源"<<endl; }                 ~RALL()  // 托管资源,可能多个指针指向同一块内存区域,if判断不能发挥作用                 {                         if(NULL!=_p)                         {                                 delete _p;                                 _p=NULL;                         } cout<<"释放资源"<<endl;                 }                 // 资源指针,被托管的都是资源的地址,                 // 所以要重载这些运算符,能够获取                 // 资源的地址                 T* get()const;             T& operator*()const;  //目的就是返回托管的指针指向的值             T* operator->()const;  // 似乎没怎么用到这个                 void reset(T* new_p);  // 更改托管资源地址                 void swap(RALL<T> &rhs);  // 交换地址         private:                 RALL(const RALL<T>&);  //禁止调用拷贝构造函数                 RALL<T>& operator=(const RALL<T>&);  // 禁止调用赋值构造函数         private:                 T* _p;  // _p指向被托管的资源 }; template<typename T> T* RALL<T>::get()const {         return _p; } template<typename T> T& RALL<T>::operator*()const {         return *_p; } template<typename T> T* RALL<T>::operator->()const {         return _p; }         template<typename T> void RALL<T>::reset(T* new_p) {         delete _p;         _p = new_p; }         template<typename T> void RALL<T>::swap(RALL<T> &rhs) {         std::swap(_p,rhs._p); }

#include<iostream> #include"RALL.h" using namespace std; class resource {         public:                 resource(){cout<<"resource::resouce()"<<endl;}                 ~resource(){cout<<"resource::~resource()"<<endl;}         private: }; class test {         public:                 test():_p(new resource){ cout<<"test::test()"<<endl; }              ~test(){ cout<<"test::~test()"<<endl; }                 //拷贝构造函数                 //RALL类重载了*运算符,这里new的同时                 //直接用rhs的值来初始化新开辟的空间                 test(const test& rhs):_p(new resource(*rhs._p))                 { cout<<"test::test(const test&)"<<endl; } //                test& operator=(const test& rhs) //                { //                        cout<<"test::operator=(const test&)"<<endl; //                        if(this==&rhs){return *this;} //                        //delete this->_p.get(); //                        //*_p = *(rhs._p); //                        _p.reset((rhs._p).get());  // 函数里面已经写了释放 //                        return *this; //                }         private:                 test& operator=(const test& rhs);  // 赋值构造函数造成多个指针指向一块区域                 // dubble free         private:                 RALL<resource> _p; }; int main() {         test em;         cout<<"————————–"<<endl;         test em2;         cout<<"**************************"<<endl;         //em2 = em;  // 这里赋值了会导致em2和em释放,段错误         //后面我在RALL类里面的析构函数做了特殊处理,指针为NULL才delete //结果没考虑多个指针指向一块区域         cout<<"准备开始释放资源:"<<endl;         return 0; }

<img src="data:image/png;base64,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" />


资源管理–智能指针:       ——是存储指向动态分配(堆)对象指针的类       ——在面对异常的时候格外有用,因为他们能够确保正确的销毁动态分配的对象       ——RAII类模拟智能指针 C++11提供了以下几种智能指针,位于头文件  #include<memory> ,它们都是类模板

std::auto_ptr(复制/赋值)   现在已淘汰 std::unique_ptr  c++11 std::shared_ptr  c++11 std::weak_ptr    c++11 g++ -std=c++11 xx.cc

1、std::auto_ptr在构造时获取对某个对象的所有权(ownership),在析构时释放该对象 2、std::auto_ptr要求其对“裸”指针的完全占有性—->       ——在拷贝构造或赋值操作时,会发生所有权的转移      //两次使用auto_ptr,第一次的会转移,转移了之后就失效了,其后不能使用,只能最终获得转移权的智能指针使用 3、本身存在缺陷

#include <iostream> #include <memory> using namespace std; int main() {         double * pd = new double(88.99);         auto_ptr<double> app(pd);         cout<<"*app = "<<*app<<endl;         cout<<"app.get()= "<<app.get()<<endl;         cout<<"pd       = "<<pd<<endl;         int * pi = new int(5);         auto_ptr<int> api(pi);         auto_ptr<int> api2(api);   //这里实际上是拷贝         //表达的是值语义,但是实现有缺陷,在底层已经发生了所有权的转移         cout<<"*api2 = "<<*api2<<endl;         cout<<"*api = "<<*api<<endl;  //段错误,api已经不能在使用了         return 0; } <img src="data:image/png;base64,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" />

4、std::unique_ptr是一个独享所有权的智能指针,它提供了一种严格语义上的所有权,包括:      ——拥有它所指向的对象      ——无法进行复制、赋值操作      ——保存指向某个对象的指针,当它本身被删除释放的时候,会使用给定的删除器释放它指向的对象      ——具有移动(std::move)语义(和前面的把左值改右值一样),可做为容器元素

1.无法进行复制、赋值操作   std::unique_ptr<int> ap(new int(88 );   std::unique_ptr<int> one (ap) ; // 会出错   std::unique_ptr<int> two = one; //会出错


3.可做为容器元素   unique_ptr<int> sp(new int(88));   vector<unique_ptr<int> > vec;   vec.push_back(std::move(sp));   //vec.push_back( sp ); 这样不行,会报错的.   //cout<<*sp<<endl;但这个也同样出错,说明sp添加到容器中之后,它自身报废了.

2.可以进行移动构造和移动赋值操作  unique_ptr<int> GetVal( ){     unique_ptr<int> up(new int(88 );     return up;  }  unique_ptr<int> uPtr = GetVal();   //ok  实际上上面的的操作有点类似于如下操作  unique_ptr<int> up(new int(88 );  unique_ptr<int> uPtr2 = std::move(up) ; //这里是显式的所有权转移. 把up所指的内存转给uPtr2了,而up不再拥有该内存.
#include <iostream> #include <memory> #include <vector> using namespace std; unique_ptr<int> getValue() {         unique_ptr<int> upi(new int (88));         return upi;  //最后获得的是一个右值 } int main() { //unique_ptr无法进行复制或赋值,表达的是对象语义         unique_ptr<int> one(new int(1));         //无法进行复制、赋值操作 //        unique_ptr<int> two(one);   //错 //        unique_ptr<int> three=one; //错  <img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAcoAAAA0CAIAAACFEe9WAAAAA3NCSVQICAjb4U/gAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAJzklEQVR4nO2dPZLbuBaFj169pUgOXLMCegWSEkeTvgwqR+qkM4fOJmGHUuZ0ok6aswJrBVMODO2FL6AAXRA/BCVSTcnnK5dLAi/BCwi4vATJ0/jy5QsIIYQMzX/e2wFCCHlMGF4JIWQUGF4JIWQUGF4JIWQUGF6nigLq9/ZhDO63XRoo39sHcleEwmsF1EANqOvqrt3hqIEaqK6r05LpZDFQWyzlcE1I8wz8I75q05DW0WvxT6Liva3ELkVXPTH7vv7E2jUqZcTJhkq42hiouL0G5sB20LF0BUWp6wb9kCFfVbdtmqqaviwyy3MJPJhVjRZBhqpZxjidYT/glBivcyTKi2X2oPKkJcsr0RWx2AcTcVq9Easnxz7Hn1i7bkPwJ0sk0b59adpSiN4ovAQiE1WFp2usPGB4Dj1FqS+f/O9HqauuGamqK8Nrdj8Xpa4rlV+eT9fiQCEmqjZf5bQJZivprMFOfuuzzCN0xFiWr4FvZobMXcvKrS1x3Jh9acpLz88aWAJLt3Wdx72AJsU7mK9z4NV8fgHWwvKX+fAqChfALJQkKmALbIC9tylYT8w+4U8a267YuCpEHxZu4gx3a2t0dWbNEg3s3L3SfDAfDsDM9MYB2MTy2Sbpqetal2V1VfoTYr+azRZPvXaxDtW6bAJyqc/u1SJFi5Vfhk2ya611Ey6LUtf1dr7cmS3nQHvOyc+FouyM9clv1wUcnhazlT8louU96M5elRlANh9pvhbuwCq9xMTPAiphU0YST7nCVbvZUC1sYL7KSuQRZXoio6RMoGL2lXCjjB+i87gxytCJxJJO8WSGKPtKeRXGsrDK7ZBEPTH7mD/IWGQo3K/+uIKbFcosuDXe/IwSeeMQyZ/Jt5dR3s+o7GnY+NAkPcApNrQn/dXZ68k6e3FAVedwJT0qde1uOH2OlfdFZtYy40Y4e1VVK2x2NS3WLru5Xz8P87u45IZXWd6MpNKdS+4IC9SDeBhSbiWlZwBxXJh5Jf9P199yzEaTdHj1y4ONStQTpDDzv9mryAsH1nPtfu0bXmtx2pCnq1h4DdrH/GktUCR+fcTHldzU6hwtBomt6oJxiOTPFOv/0h2f/l6nk1CpRVw4h5hQGlapeHkeMiZFTSJxqhU4CxPzYuVxF2Luy01OHYEqW1HMdGM8e4206+J+HiG8Xv3kwMz9d0EqXQA7YGNqOGbv+GYWB/qeW7W43EvYjERzgXkAVsAC+AG8iHWAAli6V+iWJuFdXHf0I9BcVv5tDnexve/PAngzn9/cTYl2+eyBI1AB391FErnosXR/o+vHYQINKODJHL01eEqzatSMYZfDT+Pl4Wkxm81ms9nmn+PLp+bjah8vz2O/2uj1n5c27Pjr317lERdmLaz7YtMGu4vWUm33SBZPh+4dBu3ny7givDbzrZW1XXAV8QcAMx+UWEvdu/VXohBAYYZ7bC49R74qYAl867KP8Ut8Dj6pk1lPQxMv5DLaV+DotaiZwBtg5dVgp/rnjMP9DcxNiPwjo56Yfcwfed764Ia/YLsS/AUsgbn4pQqTb66AGbAxQ2WocZjG/qwLMQaaftiawHpak316w9qmO+XzcmhXnOxSVbul/ik2NgmjTMv2r3or8i95ST3ffj+P4D/X+nWfLu/rp5v2OX4uPhauO/tXvf1q3VZft3OkSbRrMnQsDtibCXYNrnXDR16RxW552cVWe22l3F3shVXlPb8lrwct8skBfwGhdv30v6q4vXbvyxWun61dgoXpddU0hecevJWT2r10Da51ardcR2oL9kOrP337tD/BW5F+uzrHFbyzV+Edt5VK++31Fw38Qev/WP7iQHBRIvHkQNG6ozP42qu46G6nhH54BeQtJrGt1LqqtKipSJf3xb0ad106t0CUO2sJVc7ya7BdtrbMfm6vbpiDxsp7cNMHswbERuRHeuwv+DDTA3BBu4JLvbchNv4veq1gyg9OxVybsMv3Rji8+tkNuQGP2ue92pXIK8cm8VoBzLN6eYj0daLn/5iH0/f8nqDeKyGEjAE1BwghZBQYXgkhZBQYXgkhZBQYXgkhZBQYXgkhZBQYXqdKjjTMPXK/7RpUTnvKz8OSwRjxudfWM/+U0+6FjrwN1Tp6+m2roKvytavby2n7Ui/jMaycdvBttwtR1fRe4CTDQzntftzmlTblxTL5EjDltHtxvWLWsHLa75G6ZshXkxHI1RyohpDTroSqgJxmMo/IkdPWrtaytKzc2qyTaiA5bfmv6jruxfgiqr7OKfoLEsbkTmL1xOwT/qTDqzW4pZx2WkPA3yUopBk8i1v3+oUuL3V1JASywq54115Ky56+OH/CxBPiY6C9HZTTDthXlNNO2sf8QcYiw28gp50mkLoqdXY/Q7y61CIKq0r+YZjzvq5wCbPXdyH71lajSCYncCMyuTNjawvAk7nzsfKdP4X2oBy+shBC8m4lChvylWEBbMxxGy3RHIXMJ8/PQSiALfDJBCZfTvuzK3IqafrflyXMZw78AmbAC/DjavuWPxVwFLq9rSAVbJc/rmD+yAqMSuz/TPlRjLcPRk/2snHYi73pAQBbL8JaHdhdzoWL+rrVf7XkSv/9+GxSy04ZPhTlWm/Ogqf71UaveZNsmlBOO24zEpTT7uSB5LRbFOXz4uWb652qfqzfTvrOs08vvbIGMmkopx2xj0E57YQ/lNM+E9RdDaWuxcfF8e1UVpTf2+mrV8/h6W3xLNJV9XnxZqs8iVQXpd61ZLw9+WpyAyin7RhQTrvVn5TTbvVnjpw2EAyvsQcGpPp2o2PtSUy7AdG9WxX6S6veX6gNyleTsaGc9oSgnLblUeS0BRl/dZA8GJTTnhCP2ue92pXIK8dmODltQgDKaRNCyDhQc4AQQkaB4ZUQQkaB4ZWQQXmvO3JkejC8EkLIKDC8EkLIKDC8TpX7lZ1Oc7/tGlROm/wOhMIr5bQT3ExO+9m8XN/wMHLarXaNyrBy2nNg+7jPJpMxoJx2PyinfYE/sXbdhhvLad9pbk5GoGtxYFg57Ybr5bTXwDczQ+auZULWehA57SWwdFs3hpz2s6sUNRdaUy/AWlhaeREpRiWVpSTK6I/40irBemL2CX/S2HbdUk7bRwM7d680VqfmIKRbDkY4kfksiUE57YA95bTT9jF/kLHI8PBy2sxeiYFy2nEop91pTzlt9JXTJr8RlNOO24wE5bQ7eVw5bfJbQTntiH0Mymkn/KGcNiESymk7BpTTbvUn5bRb/dkpp831AWKhnPaEoJy25X7ltBleieG/4eKlufqb7PXONbd3Jkuzfvd49GpXKw2/cq25F8o8sBV88eEhz3xkVCinTciQMHslBmoOEELIKPwf8Z5kaxO7ZKAAAAAASUVORK5CYII=" /> //可以进行移动构造和移动赋值操作 // 调用的是移动构造函数         unique_ptr<int> tmp = getValue();         unique_ptr<int> up(new int(88));         unique_ptr<int> up2 = move(up);  //这里把显示的左值所有权转移,把up所指的内存转移给up2,而up不再拥有该内存 //    cout<<" *up = "<<*up<<endl;  //段错误,move之后不能再使用         //可做为容器元素        unique_ptr<int> sp(new int(33));        vector<unique_ptr<int> > vec;         vec.push_back(move(sp));     //必须转换成右值 //     cout<<*sp<<endl;      //段错误,在添加到容器的过程中转换成右值,自身不再拥有内存         return 0; }

5、std::shared_ptr是一个引用计数智能指针,用于共享对象的所有权      ——引进了一个计数器shared_count,用来表示当前有多少个智能指针对象共享指针指向的内存块      ——析构函数中不是直接释放指针对应的内存块,如果shared_count大于0则不释放内存只是将引用计数减1,只有计数等于0时释放内存      ——复制构造与赋值操作符只是提供一般意义上的复制功能,并且将引用计数加1.      ——问题:循环引用(最终导致内存泄露)

#include<iostream> #include<memory> using namespace std; int main() {         shared_ptr<int> sp(new int(1));         cout<<"*sp="<<*sp<<"  sp.use_count="<<sp.use_count()<<endl;         shared_ptr<int> sp2 = sp;  // 赋值,只是引用计数增加1         cout<<"*sp="<<*sp<<"  sp.use_count="<<sp.use_count()<<endl;         cout<<"*sp2="<<*sp2<<"  sp2.use_count="<<sp2.use_count()<<endl; } <img src="data:image/png;base64,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" />

6、std::shared_ptr是强引用智能指针 强引用,只要有一个引用存在,对象就不能被释放

#include <iostream> #include <memory> using namespace std; class Parent;    //前向声明 class Child {         public:                 Child()   {  cout<< "Child()" <<endl;  }                 ~Child()  {  cout<< "~Child()" <<endl; }                 shared_ptr<Parent> _parentPtr; }; class Parent {         public:                 Parent()  {  cout<< "Parent()" <<endl;  }                 ~Parent() {  cout<< "~Parent()" <<endl; }                 shared_ptr<Child> _childPtr; }; int main() {//问题是:循环引用,发生内存泄露         shared_ptr<Parent> parentPtr(new Parent);         shared_ptr<Child> childPtr(new Child);         cout<< "parent' use_count()= "<<parentPtr.use_count()<<endl;         cout<< "child' use_count()= "<<childPtr.use_count()<<endl;         parentPtr->_childPtr = childPtr;         childPtr->_parentPtr = parentPtr;         cout<< "parent' use_count()= "<<parentPtr.use_count()<<endl;         cout<< "child' use_count()= "<<childPtr.use_count()<<endl;         return 0; }

<img src="data:image/png;base64,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" />


7、std::weak_ptr 是弱引用智能指针      ——强引用,只要有一个引用存在,对象就不能被释放      ——弱引用,并不增加对象的引用计数,但它知道对象是否存在。如果存在,提升为shared_ptr成功;否则,提升失败      ——通过weak_ptr访问对象的成员的时候,要提升为shared_ptr

shared_ptr的误用 class std::enable_shared_from_this 方法shared_from_this() 删除器
#include <iostream> #include <memory> using namespace std; class Parent;    //前向声明 class Child {         public:                 Child()   {  cout<< "Child()" <<endl;  }                 ~Child()  {  cout<< "~Child()" <<endl; }                 weak_ptr<Parent> _parentPtr;    //弱引用   }; class Parent {         public:                 Parent()  {  cout<< "Parent()" <<endl;  }                 ~Parent() {  cout<< "~Parent()" <<endl; }                 shared_ptr<Child> _childPtr;                 //weak_ptr<Child> _parentPtr;   }; int main() {//问题是:循环引用,发生内存泄露;使用weak_ptr能够打破循环引用         shared_ptr<Parent> parentPtr(new Parent);         shared_ptr<Child> childPtr(new Child);         cout<< "parent' use_count()= "<<parentPtr.use_count()<<endl;         cout<< "child' use_count()= "<<childPtr.use_count()<<endl;         parentPtr->_childPtr = childPtr;         childPtr->_parentPtr = parentPtr;         cout<< "parent' use_count()= "<<parentPtr.use_count()<<endl;         cout<< "child' use_count()= "<<childPtr.use_count()<<endl;         return 0; } <img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAV8AAACeCAIAAAAaFJ5zAAAAA3NCSVQICAjb4U/gAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAPMElEQVR4nO3dP3biOhvH8Yd73qXgFDmzAmcFgSbVtNOZEpp0KaebxpRxN+2t0mBWEFZwT4qIvfAWxvYjS7KNgUCS7+dMkTH+h5Fk2Vg/RAAAAAAAAPCNJCK7S+/DOXze92VE0pOtLE6NSeOTre7j5CI7kZ1Ictx6dvbRNCI7kfy4dVZ67mR8ovdSSU/3FtoZe0OmfCONre/UPy0JH+1ELVKVz9B6QvMfuj+h93VWaWAnC7na1WKGJDy/UTOfoCwl+S4/VZH8WPnZPr9TrVlXUdNj/hO2Duc7OFriVMVqo7rN1dNzdShCVVfKCtM4GqH19Jm/z/6E3tfH8H5kLV0Yd/60fC+xOhqxc/7r7eM7Dqk5VWOkj06sypkp/6s/de+5ItRm5+V6Gici3Yo3ipTxTS/2JLG3W/VNcmeXik+0sd3Q/Gk5PXX2c2f/y7u2O1jjBKvrZ2q3AlXpTJxD55byJNBQhtYTmr9lf9pbh2qGULmK1TGM7W6L2K/unEMUOvjucTDOR9k+v/e9iNq9w2qe03FI8l2pZ6uRmmqJ/ari1FT/Kda3X1Ws5tULDNQ4OlURqY5R8d/YKSWN04L3KFfzpIEjrkvqzi5tuiGQ8r96JXqL+uSgK7k+fYXmz9VupOFNdG43JPW1g5X2E6yugYe2Dmm5uHuZ4F1PaP7Q/kiPK5TY/q9brsQ+J+ua6W2VBpRDaf2YQq3qLtBZqM4i/Wqdp+OQJPXum+7amxrViCT5zqTVmutlk1xvZXDf4Z9ec2UiYpe/nyIi8lwemrmIiPzoWs9aZCMiIm8i43KiPvp6oohMyv9O1MTCtteO783K7WYi23Ln2y2c/TyJWGQuclfWq9gpzQ/qKDUUx3/ie6mnsci7yEhkKfJ69PyN/clFtiIjkZHI1qlj3vfllisRmZXFKRa5F/lVTt+q8nYjEonI0HJ4kKw8AiIydxqIhchIZF3uQ4fkaW7+LOyj8N/tY3lin3cWtjidmllUrSGbzMz0fJcp/VqHkJH9Lzt8DbHIs8hMlaqeVmVrcmiraERuesxzJhuRkchGZCISibyKLFWdKerDi2/BorsRHbf1bdnq/VtubvD87v5EIqvy75X9Usv7cmVl4/LXblCish6KyL39GR1fDlsYkUS1Ao3CU/Qd7ssy3CpOH6Plb3vvkvx1urobFe6WB530zm5o61AUl0aPekD3pWjms3IlVduZ2evP1UQRictPK1QUHgP/TUTuRX53zR/yrv72fsXVcz2Forgv1JQnka3zjoryN/P1GqqS+tBjc/+KjMsa3ji7etcTmj+0P7rZvbFrr/d9tfgjci8yVp9UXJ6ZJyIjkVlZVE5VDttVH2ukykBa9lZmbjksrv0b/XlfxyG+jbar/bQ4/dvsPDjr2SxW0aPqLCQP0apaZXRb3mt4vrfXs39Fkvy4Ow/eu5LV9WfjXp2+zgzdraxuNFRXbom9SHVlW92z1JfW7nWs/s6i0ZfT14e7wH+T8PzGvqUa2/vZWMQ7sf2eQrvY2T2xL7t63o1r3HUzgbV5j0PjeLrzt++P9y6y+746y5U4jW/sbLfRkXHf7y6wyC4wf6H9LmajagS/s/C0DqGvKtR9Q5Pnxl7M18rYNxrr1+rpJk1z6x5nfePzyC8vPuZLuyNVDcrpHlC5vNC98c9uwPtK+1zDn0eo/B/7NFSS9/1G4pqd6mkoHOqrHvOD3lfLWf3cWp6GkvJLbgAAAAAAAAAAAADA1WkM9byqRzesx8zi1Bi+egY+lDXy/CMjKjpGmPpGxH/SbB3gk7IqXT1cPJBOUfQ1TBqXz3eXy+rnwNXg891ul+fO89490ik8g97pPgAfK9B3aEmnKGNoir+Ll3SnI06N3UDUUTa90ym8HYWv8dQ68GmoToLuJoTGhEkzgsadWS8xMLsm9ufl9EnRAXCMRr7DerbPoRiV+TMHplNs3sx2ObJMThvGAeBjdKW/dKRTuLIXMz+80x9Op9i8+YbqJTfj7ft/B24EwDDWvURVuwPpFNZlSOOKw766yBO1kjypF+2ZTsFdSQABfKMJIISnoQAAAAAAAAAAAAAAQED9yKJJi0FT+5HXrSMoG89NV49Fhp+nTnI1uFvjuQbgGukhDrpRiDuyWfxCvxpYb82t+TwTCVyTchRWnD7KrBpOuVlE1uDK22rkhOdHPfuOuVIDNrx1Pn28X79Y4zmz38voke4DcBll6/DjRsJjHu/n+0Hcd8v658GLFqR7TPeeHgk+k+fmT4iLJDfjRuMgsnkz4ykpL8BFdI3gFhGR9Wyf9uAfTt1H8hAtf+1Hgks2cRuV+DbyLJa9b8c3PwZuE8Axytbhv3eZ/rzongC4LmXrsFn8sVJb3BiW42QvZv5UB8c9OTEypLwA10yntlRfWARSW5rpL+USoen2K0U6tf21BSkvAAL4RhNACE9DAQAAAAAAAAAAAACATy+YE/M9nel5kOIp1sN//RQ4v5Z8mdR8o9ahI2fnPM+SxsUT7ElO6wC/1Ox2O5OmOjqufE2Nj9AFqBiBYdK4HIthB0uVC+hpxeiK4My+YJjU9BoNpsOs3DOh+p1gU59vffvZTifr6dO4WtF+X0P7M/g4SL9xKM5qencKaB3QwkqQjFVRTJJEzWMV0LLgF38XL+lqE6fGbiDqymPX3mAD4OZWhlgJd6qs620led0QhPYzxEnW2y+eGvvHxNX7De3PgOMQ6Cj0PzxdaB3QolHz68Jtn48arUOzSHlOXvVqvLVFOnvU/YTXbw0ODZ2ru7ooviDM5latLbe0DkOOQ+zpOojvU6PvgFPR2VDeJAWd+NYjJ27zZrbLkaWOp7yQbFLty0yei0p+jft5AkWcX0NUZnIBB9Gtw3j+tz49/pyal0wkvo22q33pitO/TmiLI3uxUmR6im6LJY4LndmvJU6Niq1shmObt0H72Zi/3NHNYlVHbYpI8hCtqsro3Z8+78BzHEjHwQWlxuS5cbujqrO6nyFPxE150WXZ7t7mSVuKjIi1siMuMeod3d9eLdbv7kzLfnYdIt/coSsv3/4ccxzOlI7T/CC/zTdEOEDHD1Dg4kjHwUWo/gGnjutFOg4AAFfF+33gkXdDAAAAAAAAAADAKcTWyE0Pd5BgdeM//HCVm+lCyouFlBd8Ds4oxL5LtZbC5pBHUl5qpLzgOuhRWMF0E7mtHgTwDCPoW9rU0wT+sr4fH9W9js+e8jIf3z+HD0X6eL9+scaLZr+X0eOxKS+bRfQlhqHiEkLpJo2/3esIb6F0putLEM91BCkvavukvOAqVH2H5CFaVueWzSLSsQDr2f5v/zDiPpKHaPmrXGE2cYIissmxMQSbxR8zfy3Oos/361m0EBGJ0+l4XE7evc7HMr5pT3nxH4c4nZpZvYfZZGamnbVsPduv6IDjFt9GnqnZ+3Z880PNNTjlBejtn+5ZPg1SXkh5wSlVrUMg3eRUshczf6o74E/dMTItSHkBPpqbbhJOK2mGhtj35tzpjXjHfPhXmKS8DELKC/D5kfICIISUFwAArgopLwAAAAAAAAAA4DCkwlhIhcG30zKimVSYGqkwuIjU1MMEGmMC9AP6btSKGlNghSI0HuZvT0NpeeRAhSS0+RqpMO2PXvQZfzF8ZDetA1pYCZKxKopJkqh5rAJaFvzi7+KlUNrKsDQUUmHU9kmFwYU0an5duENjE8VXpDwnr3o13toinT3qfsLrtwaHhs7VXV2UZhCmb6vWlltahyHHIfZ0HcT3qdF3wKno9BdvgkCSv05Xd/t8ESfSyXGNaSukwpAKgyF06zCe/61Pjz+n5iUTiW+jbRlzEqd/u0NbDk1bKYTTUAashVQY4LRSY/LcuN1R1Vndz5An4oaJ6LLspq0ck4bSF6kwg5AKg24dP0CBiyMVBheh+gecOq4XqTAAAFwVUmEAAAAAAAAAALhWsTVy08MdJFjd+A8/XOVmupDyYjnTcw3q4U2ee8MpOKMQ+y7VWgSbQx5Jeamd55lI1Y6f+ieU8UXpUVjBdBO5rc46nmEEfU9E6mkCf9Hcj4/qXsdnT3mZj++fw4cifbxfv1jjRbPfy+jx2JSXbFIN1sx+d461BbRQuknjb/c6wlsonen6EsRzHUHKi9r+OVNeyr081brwhVV9h+QhWlYRB5tFpGMB1rP93/5hxH0kD9HyV7nCbOIERagz20CbxR8zfy3Oos/361m0EBGJ0+l4XE7evc7HMr5pT3nxH4c4nZpZvYfZZGamndV1Pduv6IDjFt9GnqnZ+3Z880PNNTjlJU7N7ln+LPruD76xf7pn+TRIeeloXuPU7F6nq7svcQhwflXrEEg3OZXsxcyf6g74U3eMTAtSXgZI8t3rdEVSFAZy003CaSXN0BD73pw7vRHvmA//CpOUlwF6ZF4DuHqkvAAIIeUFAICrQsoLAAAAAAAAAACfUOP+/lUFh/BcAHBZ1qN6H/mDehdJSQHQn1Xp6jgDNW7CjWBRYw2ssIRqAT0tlJLS/ijCmX51FoCjzDYSKSpnVfUCfYckURPtiqpXleTFS6EUlitOSQEgUtWr8pyt65g17NKu4oFzu4pI8s6slwhlK0l76xB7ug7i7VAAGOR/5R/ZZJSJiGyikSc3aD1rJoYk+et0dTcqwgLi1Dy1b2fzZrbLKCKSCPg0hmZDxbfRtow/idO/3WEuh6awFC6QkgKgL+teoqrd6lrB5HkVzdxMf9F12k1hubqUFABfAd9oAgjhaSgAAAAAAAAAAAAAABBQP7Jo0mLQ1H7kdesIysZz09VjkeHnqZPQz+fxXANwjfQQB90oxB3ZLH5xR3pMkrs1n2cigUvoGoUVp49Sj88sfhi+Hq15W42c8PzobN8xV2rAhrfOp4/36xdrgGj2exk90n0Azku1Dt70lx83Eh7zeD+fru5Go9Hobln/fH3Rgtwtt/12YD8SfDQajUYzeXZ/4j65GTcaB5HNmxlPSXkBzqpqHZL8OVreje5W091ut3udru4agQ4e61lUDOL2D6fuI3mIlr/2I8Elm7iNSnwbeRbL3rfjmx8Dtwmgj670l//e5fGnlNUXwPfRdd9hs/hjpba4MSzHyV7M/KkOjntyYmRIeQGumU5tqb6wCKS2NNNfyiVC0+1XinRq+2sLUl4ABPCNJoAQnoYCAAAAAADA97a79A6c1NBfuwHw1dE6APCjdbhKyVfro+593vdlRL7f1+j/B6I2axQf7u+CAAAAAElFTkSuQmCC" />

<img src="data:image/png;base64,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" />

#include<iostream> #include<memory> using namespace std; class X {         public:                 X(){ cout<<"X()"<<endl; }                 ~X(){ cout<<"~X()"<<endl; }                 void fun(){ cout<<"X::fun()"<<endl; } };

int main() {         weak_ptr<X> wp;         {                 cout<<"wp use count="<<wp.use_count()<<endl;  // weak_ptr没有get成员                 cout<<endl;                 shared_ptr<X> sp(new X);                 cout<<"addr ap="<<sp.get()<<"  sp use count="<<sp.use_count()<<endl;                 cout<<endl;                 wp = sp;  // 并没有增加引用计数                 cout<<"addr ap="<<sp.get()<<"  sp use count="<<sp.use_count()<<endl;                 cout<<"wp use count="<<wp.use_count()<<endl;                 cout<<endl;                 shared_ptr<X> sp2 = wp.lock();  // 弱引用要提升为强引用才能访问托管对象                 cout<<"addr ap="<<sp.get()<<"  sp use count="<<sp.use_count()<<endl;                 cout<<"wp use count="<<wp.use_count()<<endl;                 cout<<"addr sp2="<<sp2.get()<<"  sp2 use count="<<sp2.use_count()<<endl;                 if(!sp2){  cout<<"object is destroyed!"<<endl;  }                 else                 { // 引用计数+1                         sp2->fun();                         cout<<"weak_ptr lock 成功"<<endl;                 }         }  // 离开作用域,sp、sp2被释放  weak_ptr知道自己托管的对象是否释放了

        cout<<endl;         shared_ptr<X> sp3 = wp.lock();  // new X的对象已经释放了,提升失败         if(!sp3){  cout<<"object is destroyed!"<<endl;  }         else         {                  sp3->fun();                 cout<<"weak_ptr lock 成功"<<endl;         }         cout<<"wp use count="<<wp.use_count()<<endl;         cout<<"addr sp3="<<sp3.get()<<"  sp3 use count="<<sp3.use_count()<<endl;         return 0; }

<img src="data:image/png;base64,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" />

8、shared_ptr的误用      ——class std::enable_shared_from_this      ——方法  shared_from_this()      ——删除器

class A:public enable_share_from_this<A>

使用场合:当类A被share_ptr管理,且在类A的成员函数里需要把当前类对象作为参数传给其他函数时,就需要传递一个指向自身的share_ptr。 我们就使类A继承enable_share_from_this,然后通过其成员函数share_from_this()返回当指向自身的share_ptr。 以上有2个疑惑: 1.把当前类对象作为参数传给其他函数时,为什么要传递share_ptr呢?直接传递this指针不可以吗?     一个裸指针传递给调用者,谁也不知道调用者会干什么?假如调用者delete了该对象,而share_ptr此时还指向该对象。 2.这样传递share_ptr可以吗?share_ptr<this>     这样会造成2个非共享的share_ptr指向一个对象(拷贝)(一个指针被两个对象托管),最后造成2次析构该对象。

#include<iostream> #include<memory> using namespace std; class point:public enable_shared_from_this<point> {         public:                 point(int x=0,int y=0):_x(x),_y(y)                 { cout<<"point(int,int)"<<endl; }                 ~point()  { cout<<"~point()"<<endl; } #if 0                 point* add(const point* rhs)                 {                         _x += rhs->_x;                         _y += rhs->_y;                         return this;                 } #endif                 shared_ptr<point> add(const point* rhs)                 {                         //在类内部进行托管                         _x += rhs->_x;                         _y += rhs->_y;                         //return shared_ptr<point>(this);  // 和point* add(cosnt point*)一个效果。                         return shared_from_this();                         //这个方法在enable_shared_from_this<class T>中                 }                 friend ostream& operator<<(ostream& ,const point&);         private:                 int _x;                 int _y; }; ostream& operator<<(ostream& os,const point& rhs) {         os<<"("<<rhs._x<<","<<rhs._y<<")"; }

void test1()//对shared_ptr误用 { //1、对shared_ptr的误用         point* p1 = new point(1,2);         shared_ptr<point> sp1(p1);         cout<<"sp1 use count="<<sp1.use_count()<<endl;         shared_ptr<point> sp2(p1);  //只有sp2 = sp1才会提升引用计数 //      shared_ptr<point> sp2(sp1);  //这样也会提升引用计数         //重复对一个对象托管,会导致多次调用析构函数         cout<<"sp1 use count="<<sp1.use_count()<<endl;         cout<<"sp2 use count="<<sp2.use_count()<<endl; } void test2() {         shared_ptr<point> p1(new point(1,2));         shared_ptr<point> p2(new point(3,4));         cout<<"p1 use count="<<p1.use_count()<<"  p2 use count="<<p2.use_count()<<endl;         p2.reset(p1.get());  // reset先释放p2,在把p1的值赋给p2         cout<<"addr p1="<<p1<<endl;         cout<<"addr p2="<<p2<<endl;         cout<<"p1 use count="<<p1.use_count()<<"  p2 use count="<<p2.use_count()<<endl; } void test3() {            shared_ptr<point> p1(new point(1,2));              shared_ptr<point> p2(new point(3,4));             //误用, p1和p3同时托管一个对象            shared_ptr<point> p3(p1->add(p2.get()));            cout<<"p1 use count="<<p1.use_count()<<endl;            cout<<"p2 use count="<<p2.use_count()<<endl;            cout<<"p3 use count="<<p3.use_count()<<endl;                  cout<<"p1="<<p1<<"  p2="<<p2<<"  p3="<<p3<<endl;    } int main() {         //test1();  // 这里test1()和test2()同时打开段错误,不知道为啥         cout<<"—————"<<endl;         //test2();  // 和上面同样的原因,我猜测是前面开辟的堆内存没有释放,后面又要来delete,所以出现错误。         cout<<"—————"<<endl;         test3();         return 0; }

//point(int,int) //sp1 use count=1 //sp1 use count=1 //sp2 use count=1 //~point() //~point() //————— //point(int,int) //point(int,int) //p1 use count=1  p2 use count=1 //~point() //addr p1=0x244e030 //addr p2=0x244e030 //p1 use count=1  p2 use count=1 //~point() //~point() //————— //point(int,int) //point(int,int) //p1 use count=1 //p2 use count=1 //p3 use count=1 //p1=0xbd5030  p2=0xbd5070  p3=0xbd5030 //~point() //~point() //~point() //采用返回shared_from_this() //————— //point(int,int) //point(int,int) //p1 use count=2 //p2 use count=1 //p3 use count=2 //p1=0xc2f030  p2=0xc2f070  p3=0xc2f030 //~point() //~point()

#include <iostream> #include <stdio.h> #include <memory> using namespace std; struct Fpcloser {         void operator()(FILE * fp)         {                 if(fp)                 {                         cout<<"release file pointer!"<<endl;                         fclose(fp);                 }         } }; void test0() {//自己指定删除器         unique_ptr<FILE,Fpcloser> up( fopen("test.txt","w+"),Fpcloser() );         fputs("hello,world\n",up.get());     //get()返回托管对象的指针 } void test1() {//指定删除器的方式         shared_ptr<FILE> sp(fopen("test.txt","r+"),Fpcloser());         char buff[1024];         fgets(buff,sizeof(buff),sp.get());         cout<<buff; } int main() {         //test0();         test1();         return 0; }

<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAX4AAABRCAIAAABaNVr8AAAAA3NCSVQICAjb4U/gAAAACXBIWXMAAA7EAAAOxAGVKw4bAAARI0lEQVR4nO2dPXbbutPGH73nvxTRRc5dAbICyY2rtOmocyupcZcyXRq6tLq0qdyIXoG1gntSBNoL3wIGPPgYEJQoUXbmd1yY1BAYgIPhACSH+PfffyFcITXQTa3DOXi/7dJAM1phqtG6UaMV9x5JuJ4W6IAOqE8ruvNPlQY6oD2tTEehkmqktjia8ZqQR/sVaduQoPaO/FFqvrdrcogzfq4cTn6oPly7zkrDKGloiapGoOblNREewZbqtmvHMsn3Str1nMk4xiqZjn9dID+i6zlf51DqaJy7SqlDp/tb0hWcX4AdjUFvcOWUyJfow7XrMiRPWSb4iuUb2xZFekNFF9diLh/yNPr6PF2P61HEiLXdpCaVvMpxV5vWlhNcQun1J7BXndpvNKn9el1U1UYqGXMJ6uXkG7u/ifTs/L+2r96jCUIDOvgb38U406+jrouHUM14Ya4cTj6jT971OAHOrhTpQ+UHXPB/7aIu4jo/7gcdncq8fLItIOoNG9ZRyFO3naXQJTXaHfFalGq02zDlvRaliCw9YHL6ox5nf+4EmE0VmWBwQUueQifTMKeTDoPON2XqZWA3aSG0RnpZox6EXng5+Zao0fBV9NbL0aScrCMfGtDhPdT1NPbwePaULIeT5/RBwcRN+ZuxXcGPJuiwT7q8I+wQ2dPEueyOCXPcJapsSCdCnrp+U1/3u4ZGEw9Vt51uXMlvx9YtreUKo57/KxXcAvCN+wsA4NH2+xoA8E9fOc/AHgDwG5jbnfTU0p0AlnZzSXYaDqW6A8DK1rsFDlb5PJtIz1FQwBr4bAetiobKHemlANP/y9RPhcyBP8AMeABeTpYP9GmBAzADZsAhGsDJdsV2BWBlzUkBC+Cr3X8g9nYDVACOtcNBbG0PAFhH3mcDzIBnq0MP9be1/rHxe+G/T/c2JFn3GptqbvWqciVslyt9+x4XrItdD8fM/9sOL0EBj8CKmGwhO+uqhvpzDdwUyJyJPTAD9sASqIAX4IEMSDPYnlIHmkCpOq32g3Wpv2x1R8vH+lTAzv6/83/KtCtmaz3XT99bVXaQA1j45+h0O8yggZq4mMB4TNSzsDacRTX31cN3X7u6fbndfZ4ZPj8MuqK+Y05wPcYWg4nGEVGduUBtbSHO62/98luyE4CypsDZ2T2zWQML4HufPMcf8n/ybmthOQYzljZkzzfgELXIGPcqFe+4YXBXUN0vYG7dRxAXJMvh5Dl9qE+/8V1Dsl0ZfgALYE7OlLIxxRKYAStrKmPZYR53WitiA42Ns1axHZr1lmCakwp51KfqsHvdp5qfYdgTlbPf7Kp7EubUd9XOFVl9sus7jwu/nNdfULfXstpTuszs5vzB4iud23PLz25xx82Wa/8Qt5rgFqHpcka8dkDvcAUhLp2Td8xmzctrf41c+XoGhyR35tdx8qhIPfiz0cLl1WAZVTOlJfsh6M9YPq9P8rZA3K5eu0Lk2VVUbxCCxe3tmEM6Rt6QX5YOhgZ7hyvhergbW2QhWLet9g9LuTB/5fjtt7f9umlab9H6bSX7OvwOLnxzfUSctxrvKa/p4e6kvHeOaFdTsm5yHjj7P/WRwrotvX/1d3DGRwqFoXzUPh/Urkw8cm4yjxTCPm8hjIW8SCEIwuU5+Q6XIAjCcMT1CIIwAeJ6BEGYAHE9giBMgLgeQRAmQFyPIAgTcJLrcQ9PXtWTUiQDgffkZvxE17T6T/WE2fU8SS/81Zz+XM91pXpUjdbDHvy6Lv0ZRkx6oEryMgjCmfGiHhME6EbZcMBaKH1npGRgc/J8SiTyFot+8x0D663brntZz+fr4JDB0c2Qehv99spMXEmc0onT5zXVUxu9a6Ma3XXr+eIx986Opyd7Hi2HP/8V9YMgnI8w6rEJzsz/xmZpWKAaHYzGOGpg5ZmUSLSEun0bRfl60/BRT+blvVL9GRodeIrX/7mUTly9qtE06VxvqqecnqnzyNUrCBMQu57QLqMEiz3v42bkuTduk+szffWmOd31DK83mMG8JotTobsIujbpegZkmcvrGZ9Hvl5BuDwFy8z73/rwMPNY5vKusPKZlEjbpZNd4dH4jqH1jsUx9U4xgzm2f/abqgpSxgjCxSm5w7V90ush10lGnk+JFF6G9e+j6h2LI+qdr3++hVpfbvXTtiel03DiVE9T9Y8gjAGZcNFZTzjN8IN7mvc+fURKnk2JlBTOlMPBpN7n9BysP1/va3Ne2+YtwMSlpOt1sm39JtKb6qnkvATaN7rsXoEgnBVJmnE6sngiCIMR13MiJJKTUEIQSvnf1Aq8ezbVbNMvJQiCh7zDJQjCBIjrEQRhAsT1CIIwAeJ6BEGYAHE9giBMgLiea6We7ht4Z+X9tuvUTwAKHinXM9YnAINPg2r+42pHUKikGvtzhs2lPs16DzyTTc18nS7/weKkqvTLxe5JSK4cTn6oPly7zkrDKGloiapGIPMJQA3MgfXH/Uzj5bnoh4/HKpmO/5IPVI5oLpf5KnQdjXP6jfkmtZ9+XJjzC7CjMegNrpwS+RJ9uHZdhuQpywRfsXxj20I/Ht/zzfVhDE0FN1bquHPXm5PvcT2KGLG2m9Skklc57mrT2nKCSyi9/gT2qlP7jSa1X6+LqtpIJWMuQb2cfGP3N5Genf/X9tV7NNrvOjr4G9/FONOvo66Lh1DNeGGuHE4+o0/e9TgBzq4U6UPlB1zwf+2iLuI6P+4HHZ3KvDz3zXinXtRFNckc9/aeTTJVXpT8pGdwZ+T5FHeJVHxj1Uvz0b02UDeqoPz+qMfZnzsBZlNFJhhc0JKn0Mk0zOmkw6DzTZl6GdhNWgitkV7WqAehF15OviVqNHwVvfVyNCkn68iHBnR4D3U9jT08nj0ly+HkOX1QMHFT/mZsV/CjCTrsky7vCDtE9jRxLrtjwhx3ibI60OzXyryt+2p76VR5GCma4FLHcan4xqr3tTLrbgrbVbzMbDLBUOP+AgB4tP2+BgD801fOM2ASR/wGXNoMemrpTgBLu7kkOw004U8vK1vvFjhY5fNsIj1HQQFr4LMdtCoaKneklwJM/y9TPxUyB/4AM+ABeDlZPtCnBQ7ADJgBh2gAJ9sV2xWAlTUnBSyAr3b/gdjbDVABONYOB7G1PQBgHXmfDTADnq0OqO+qB5c6ab+pZjObH+m/T/c2BFiPa1QAVHM7n69fXst/Wc8xv6lfdfih7Q+Pi+dVNfabP/tN9Xl3+9J1L7e7z6VZtU6+wzXz/47I5aWAR2BFTLaQnXVVQ2e9GrgpkDkTe2AG7IElUAEvwAMZkGawPaUONIFSdVrtB+tSf9nqjpaP9amAnf1/5/+UaVfM1nqun763quwgB7Dwz9HpdphBAzVxMYHxmKhnYW2YJZMqbwxyqeNSqfjG5Z+bOQDMb4qd/gmux9hiMNE4Yu3L6Lq1hbirwdYvvyU7AShrCpyd3TObNbAAvvfJc/wh/yfvthaWYzBjiV6EvgGHqEXGuFepeMcNg7uC6n4Bc+s+AhNJlsPJc/pQn37ju4ZkuzL8ABbAnJwpZadIS2AGrKypjGWHedxprYgNNDbOWlE7DFK42ekXnyrPlBulgsszIHUck4ovX69Ztok1ScirRnePWL06tuDjC3y7SpeZ3Zw/WHylc3tu+dkt7rjZcu0f4lYT3CI0Xc6I1w7oHa5gxk7n5B2zWfPy2l8jV76ewSHJnfl1nDwqUg/+bLRweTVYRtVMacl+CPozls/rk7wtELer164QeXYV1RuEYHF7O+aQjpE35Jelg6HBBBB0iZV+/sAt9tJUeQCbCo5lQOq4bN47tl7G9UTyx6W4Ay58c31EnLf6SE95cXdS3jtHtKuJnODF4OxfHikcFSZfz8JG1JfIw34Upyy1Xi1mveDjMahdQfh24trWIGrgEQDz0OOHvCpMiGQpFATh8sg7XIIgTIC4HkEQJkBcjyAIEyCuRxCECRDXIwjCBIjrEQRhAt5cj3kqcdB7rO5BxuDxbW7/VBToU7edfMNPEC7Hm+vZb6qhr7TtN1XyRThu/1QU6LNdzlYXS54nCEI04frkXvggARCfgmgopKCeAIskIAJIEqJMOWanbpQKDuYg7Ron6ZsgCGWErmexfn2v//NDdW+nJ81P8rL/7vZo79Po7q2gvpf3N18fDs8r997/djlbPR8evm4y5Wyq2Wz1PF+/vNzuzE93OYdCkxis8Pi4OK5VgiAcAX2RQtGcYnX7ujISJToMQgQVvpPP7FdhxjJXA4c5wKR5M+L95fCFhvoEkqrRstYjCJeCeX2Usv+tDw/V6JnNCvitq0+qvsHDSt82NSovz4ggCO+YkpvrbAqiYew3u7c5HID6rrKZk5BOD7J90jff7qrdr+2Tvr2/1U/b/nLK2T7p9be3IO/b+CkrBUFgcROufMqfVLYhkl+/aH84d4tyokX+zaWbRt3SX9PlhPVy+9O/tK3cXxeEy3ElSTOcjxEE4W/gOp5mVs3t/PnHMbMmQRDeJQXLzBdgv6lyqfwFQfhoXEfUIwjCX4a4HkEQJkBcjyCMylQf0nhviOsRBGECxPUIgjAB4nqulfqDhu7vt13yCcBRSbke92HPE/NIBJ8GDb5ofCKFSqqR2uJoLvVp1nv/Q3Q6+vCuIf/B4qSq9MvF7ilOrhxOfqg+XLvOSsMoaWiJqkag5uU1MAfWo9rSX85FP3w8VsmN/1H2XkY0l8t8FbqOxjn9xnyT2k8/Lsz5BdjRGPQGV06JfIk+XLsuQ/KUZYKvWL6xbaEfj+e+uf5OY7qL0zfhUsSItd2kJpW8yuWvNm5gOBOk1x/NCNP9t8B3az1zX7L1S8vUy8k3dn8T6dkBC/tVaNe63nqPwIQG7unuOfBk/38AbonkH/vPE9lZAbNUcFEDa+Z71slyOPmMPnlcuzi7UqQPlR9wwf81sK7eaIui7QeOCw+5sf/sgZntjT2wkjjoBPqjntp2rruOmU3ld3oTXdDiq0dLZBomYKEz6s6/inZEBnaTFkJrpJc16kHohZeTb4kaDV9Fb70cTcrJOvKhAY0saF/VUYHc1bv1OyRTDifP6YOCiZvyN2O7gh9N0OgpsLc4EkGZHWJg1EM9YBzmuEuUU14ooHiZ2Xh6atxfAACPtt/XAIB/+spxF/PfJGChp5buBLC0m0uy0zAo9fPK1rsFDlb5PJtIz1FQwBr4bAetiobKnR/yUEz/L1M/FTIH/gAz4AF4OVk+0KcFDsAMmAGHaAAn2xXbFWw0AUABC+Cr3X8g9nYDVACOtcNBbG0PAFhH3mdjY8xH8TsDOPkO18z/iyP5XhTwCKyIyRays65qaLirSQidkTkTJmjfA0ugAl6ABzIgzWB7Sh1oAqXqtNoP1qX+stUdLR/rUwE7+//O/ynTrpit9Vw/fW9FJ5IL/xydbocZNFATFxMYT2Nn4saGhTJOcD3GFoOJxhGTXnOB2tpCXIix9ctvyU4AypoCZ2f3zGYNLIDvffIcf8j/ybutheUYzFiiCSC/AYeoRca4V6l4xw2Du4LqfgFz6z6CuCBZDifP6UN9+o3vGpLtyvADWABzcqaUjSmWwAxYWVMZyw7zuNNaERtobJy1OoO/+/D0rPW4hT035w8WX+ncnlt+dos7brZc+4e41YQ2ugevSTkOeocrCHHpnLxjNmteXvtr5MrXMzgkuTO/jpNHRerBn40WLq9qf79mSkv2Q9CfsXxen+RtgbhdvXaFyLOrqN4gBIvb2zGHdIy8IV7r0anGyh2uE7nozfURcd7qIz3llbwh/QE4ol3NdGOYs//CRwrF9ZTB5OtZ2Ij6amPIU5ZarxazXvDxGNSuIHw7cW1rELW96Z586PFDXhUm5EoSpArCB0GinjLkHS5BECbg/wFErn8Wuw/NtwAAAABJRU5ErkJggg==" />

<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAVkAAAAxCAIAAAD/QE0PAAAAA3NCSVQICAjb4U/gAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAIpklEQVR4nO2dq3YjORCGf+/uSwx3B+TsE2ieIDYJGjpMPoNsEha4bIkM0yihg0LceYIYDdwTMPK79AJZcunWF7vjS1LfCYhldamkLpUu3Sr/+fj4+OXLl1+/foFhmE/MH6dWgGGYs4B9wRkjgfrUOrwHl1svDajBhAmltRKDiTucx8fHHz9+hKkVUAM1IA+TXvttp4EaqA6T6eiopBioLg41XBWa0X5B2lYkKL0mfxSZb21JLnHWmJOTy99Xn1y93hWVUdJQEVVNBpnPr0nmAWxJVnU1lEkOQ9YXvNPdGkoy7ZC6Q/4BfcH7NQ5FRh3PFUo9LE2vSFPkOips9whaIyenS/4u+uTqdRySt6xhehLnV7YugrSGiEa7zhx/UqB0m+tp9wWCWJW2H+k9To4DOX9cWTnBIEM9dGBAOpVuNJF+uW7eUUUqmfsXlJvLr2y6ivSs/b+qrdy9CQZP2huV3+edLcqo6WKblhm3mJOTy9+gT7MvcBlydiVIGwp/SgL/2zpqolzjx+2go1vZnD9ZFxD1+o000aRAVrWlo49Q2l2xFSWUdh+MvK0oQfLSCwI6zQucQbgWMR9FZBOBy0+2qcujMu1L7bL2bYt2e9iPVAgtkTp+2qXp0JTLXxE1VL6I1nJzqJTXczQPnrS/9fUFyl4eT/iTcnL5c/qgw1pD+B9ju4I/3tJ+mPRBe9ghGm9TzofWmYmAGzO6eYTEpEDKnfq6ffGgNHEZsqq1cpJ318qKltI6L+izd1gC8K3tGwDgwTbEHADwd5ucF2ANAHgDxjaRtjVNBDCxHyck0bDpoT5mttwS2Fjlm1lEeg6CAObAV9uLRGS7t6SVAkz7T1JfdWQM/AZGwBJ4PTh/oE8FbIARMAI2UY9K1iu2KwAza04CuAG+2/QNsbcroACwrx32orQtAGAeuYMFMAJerA4tyPu5/nfht8J/13d20J63GptQUz0rnIRyMtPTwxccQzxHGPl/ZX8JAngAZsSGOrKyvqPvXoAGrjrkeSfWwAhYAxOgAF6BJekhxvqfUxeaqURxWOkb6+N+2uL2zh/rUwAr+//K/6qhXjGldSVPvvsobK8DcOPfo8PtsAENSNLnA+Mx84Iba8ONCHVXLP/xtZPV63T1dWT4uuw1xA3GYb7AGEcwN95ji8648NIKcX6x9OVXJBGAsPcmd+PvMh8lcAP805Y/x2/yf/IhU0c5BmPcC5JyD2yiGhlrm6VmBM4ubzsU9xMY2/4cjJxJObn8OX2ok73y+2qyXg38C9wAY3KnhB11J8AImFlTGcoOm3G3tSA2oOxMZBbboVmzBzPz1KRAXBeb1TZNqKdwYhDJWS9WxR2ZCMjbYuVEFtd2j+Dhxpez/QaySu8Y9Ng7dOvGYEeNrg9ze4pug8CtuKR/iVuRup1FuiSO15/0OUIwK6PrujrzUebza3/jU/h6BpckE5v3ApoRkXrwF1Ad98yCvTGdkZZsh6A94/zN+iT3euN6tdoVIlcronKDSUpc3zpzSZ3Jb2jeawy6RvY5QsIX5B4fkN09XVXavyzlU/ztwN13u3StVOXtRO62JzMbB8d+pjggzn0M9/rH6cntV186e9RLdVl7vw85+z/0XSNZdX1KcAL+yn5zYyeBw667BuSQ/bOzxaw5Px696hVMcA7cH+mFBB4A2C2JgEPddDkZnW13yvmCD9nNLoK2nadLpVe9TtgIZePg96H7BZ9HYBgGYF/AMIyBfQHDMAD7AoZhDOwLGIYB2BcwDGPwfAE989gR95pT8ApFLv1UdNBHmre0jqoWw5wNni9YL4q+5yLWiyJ5miKXfio66FNORrPkCyYM8xlIrRGu3SvNZIpA338+bPCMYzC05LS5tu9T29KTckyiVkIEF+cg9TqziFMMc1QSvuBmvj0++XW5OwylnsiZytV0b3egdL0TNMNDo5zF9+XmZTaabF8EKyej2ctm+X3RIGdRjEazl/H89XW6Ml/dNvVwelZ0hofwYBfDfCKCs0npuChRjKTup6+8dBHGVvEjryQwFyhtpgOyMn2+WU5eaKhPkFMozfsFzGclfzaJsn7Tm2VRLNpzDs2bLq6FvMJypqdKotBvx9eBYT4DHZ8pls96PsATgcYYDMlj2uWzvrq/LVY/y2c9vZvq57JdTnfKZz2/302D7tujSzHMh4WuEdxSoJK7yAfOBfjrBBpttXt6PgaDe6YXOBzhojz6Z7/TcsJyc+npb6qKHysyn5d0LJNT4IV2ZRjmuJzNe4dCTccvYRw4hmGORbe9wyOwXhQfNYwHw1wCZzMvYBjmpLAvYBgGYF/AMIyBfQHDMAD7AoZhDOwLGIYBDvcF5xazxOC9TOi/2nhWMVdO9TM6uR/UYz41g7x3mDuneBr6Hzc8L/0zhGczD0Aozb6ACQjnBdlYIH1jmeTykyE76H7k1yX1rjP3LFdWdf06H4/nwSW9x/8+5Spdu5+yjAtJxlxJ6rONMVdFv4EplK7r+fjmoUGQr2drTJfN7/86tQPzeUjMC0x3NYYlK2NEdOA0x4XoFfG4ms0vJY1B5CyUSpAVDV7UVG6a/Lyga5yF/uV6kSLJsOsdspBVa7sJpZ2c4NvkvKBJz9R9zJXLMGlfEBpK31gmDfmz5xRTa/y2ctMc7gv6lxtMurfBVtpityR9QSKWzLaISIdmPbvHdGGYrnuH6ze9WY48bOCxfvlpTLEgEmk5cXldzLK+5Q7FPuWeYtK9b/usF0XBx8AYn3eKZZLJL66LjQ06ItQTCR0SDlTb+EUDxVDpzR7ljudPu8nINxN1ZaiYK1uKayNq9xjgVO3DfET8NUIuFgjQL5ZJLj+d1eqq2i2yk5kb5OQIJ83b7P1jrvQud1udbd28RXwsJV1ucywZclFr+zTdR+ziRzIM4XximVw0vABnLh1+73AAlK7n4/H8lQdb5oI5m1gml8yiGJ0gRDTDDArPCxiGAYD/AVbG8WGalGCkAAAAAElFTkSuQmCC" />

资源管理 》原理:利用栈对象去管理资源;栈对象的特性是创建对象是自动调用构造函数,当其生命周期结束时,会自动调用析构函数 》RALL 》智能指针    auto_ptr  (已被废弃)    unique_ptr    shared_ptr    weak_ptr

相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,083
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,558
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,407
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,180
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,816
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,899