C++:智能指针_auto_ptr_vc版本

来源:互联网 发布:杀破狼 js 无损下载 编辑:程序博客网 时间:2024/06/18 02:15

智能指针_auto_ptr_vc版本:


拥有权管理和转移:


当一个智能指针给另一个智能指针初始化的时候,两个智能指针将会同时指向一个空间,这样在对象析构的时候,会导致一块空间释放多次的问题,所以一个对象从始至终只能拥有一个智能指针,这样就保证不会一个对象多次释放的问题.
我们让指针给指针初始化的时候将拥有权进行转移,即指针1被指针2初始化后,指针1拥有
了管理该对象的权利,会进行析构该对象,而指针2不会对该对象进行析构


<span style="font-size:18px;">#include <iostream>#include <memory>using namespace std;template <class _Ty>class auto_ptr{public:auto_ptr(_Ty *_P=0):_Owns(_P!=0),_Ptr(_P){}//智能指针初始化的时候,需要将拥有权进行转移//将拥有权赋值给新的指针,自身的拥有权进行释放auto_ptr(const auto_ptr<_Ty> &_Y):_Owns(_Y._Owns),_Ptr(_Y.release())  {}auto_ptr<_Ty>& operator=(const auto_ptr<_Ty> &_Y){//pa2 = pa1if(this != &_Y)              {if(_Ptr != _Y._Ptr)    //pa2和pa1指向不相同{if(_Owns)               //pa2有指向,则析构pa2的指向  delete _Ptr;    _Owns = _Y.Owns;        //将pa1的拥有权进行转移}else if(_Y.Owns)        //p2和p1指向相同,判断p1是否有拥有权,有则将拥有权转移_Owns = true;_Ptr = _Y.release();    //将pa1的拥有权进行释放,并将指针赋值给pa2}return *this;}~auto_ptr()       {if(_Owns)             //当拥有权为真时,析构指针delete _Ptr;}public:_Ty& operator*()const       //*p{return *_Ptr;}_Ty* operator->()const       //p->{return _Ptr;}_Ty* release()const           //将拥有权释放,并返回指针{//将拥有权释放((auto_ptr<_Ty>*)this)->_Owns = false;return _Ptr;}private:bool _Owns;_Ty *_Ptr;};class Test{public:void fun()const{cout<<"This is Test fun()"<<endl;}};int main(){int *p = new int(10);auto_ptr<int> pa(p);cout<<*pa<<endl;auto_ptr<int> pa1 = pa;cout<<*pa1<<endl;auto_ptr<int> pa2;pa2 = pa;cout<<*pa2<<endl;return 0;}</span>

pa2 = pa1 的时候:


1.pa2 无指向  : 将pa1的指针给pa2赋值,再将pa1将拥有权进行转移;
2.pa2 有指向不同于pa1的对象 : 将pa2的指向进行析构,再将pa1的指针给pa2赋值,将pa1的拥有权转移;
3.pa2 有指向和pa1相同的对象 : 判断pa1是否有拥有权,有则将pa1的拥有权转移给pa2。


但vc版的auot_ptr也有一些问题,就是将拥有权转移后,除了不能够对其多次析构外,还可以对其进行操作,这就不好了,你都已经分手了,还不放手。


在VS版本上对拥有权有更好的管理。

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 眼周刺痛红红的怎么办 脸敷面膜刺痛红红的怎么办 脸上有凹凸不平的坑怎么办 宝宝脸上角质层薄有红血丝怎么办 红衣军到决赛圈怎么办 宝宝湿疹留下的黑印怎么办 出牙宝宝很烦躁怎么办 法斗嘴唇破了怎么办 狗嘴巴周围红了怎么办 脸上起红包还痒怎么办 睾丸胀痛有下坠感怎么办 英语不好又不会读怎么办 七个月宝宝手上长倒刺怎么办 字母纹身纹反了怎么办 花甲生的吃了怎么办 别人告我欠他钱怎么办 实习手册没有公司的印章怎么办? 家长管的太严怎么办 对于老公沉迷于股票怎么办 月经期吃了香瓜怎么办 月经漏到内裤上怎么办 上班没时间养狗怎么办 宝宝呼吸道感染反复发烧怎么办 熬夜后头晕想吐怎么办 生气后全身无力酸痛怎么办? 久坐导致的腰疼怎么办 削土豆手变黑了怎么办 熬夜后头痛眼痛怎么办 孩子毎天通宵游戏怎么办 熬夜写作业困了怎么办 三十多岁白头发越来越多怎么办 AI界面字体太小怎么办 睡不着怎么办躺倒床上脑子混乱 作息规律不正常夜里睡不着怎么办 作息不规律引起身体痒怎么办 在大学里好无聊怎么办 开会时间通知错了怎么办 商场要求商户变更位置怎么办 怀孕初期症状小腹痛怎么办 1岁半宝宝吃夜奶怎么办 戒奶宝宝不喝奶粉怎么办