栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

智能指针应用

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

智能指针应用

  • auto_ptr :
  • 不允许隐式构造
  • 不能将同一个裸指针赋值给多个智能指针
  • 允许拷贝构造和赋值构造,当进行拷贝构造或者赋值构造时,会将原智能指针置空
  • 清楚资源直接delete
  • unique_ptr:
  • 不允许隐式构造
  • 不能将同一个裸指针赋值给多个智能指针
  • 不允许普通拷贝构造和赋值构造
  • 允许对即将死亡的对象做拷贝构造和赋值构造
  • 清除资源调用deleter(删除器)
  • shared_ptr
  • 不允许隐士构造
  • 不能将同一个裸指针赋值给多个智能指针
  • 允许并且可以进行拷贝构造和等号运算符重载
  • weak_ptr
  • 无效智能指针
  • 只能使用share_ptr进行构造
  • 弱智能指针不能直接使用,必须转成强智能指针
  • 弱智能指针升级为强智能指针必须要求对应的强智能指针存活
  • 若智能指针只保存强智能指针,不占用引用计数
#include 
#include 
using namespace std;

unique_ptr fun(unique_ptr &ptr)
{
    cout <<*ptr< (new int(*ptr));//对即将死亡的对象做拷贝构造

}

void autoPtrTest()
{
    int *p=new int(33);

//    auto_ptr aptr=p,报错,auto_ptr不允许隐式构造
    auto_ptr aptr(p);//auto_ptr后无需delete p ,因为auto_ptr会自动释放内存
//    auto_ptr aptr2(aptr);//此时如果用aptr拷贝构造或者赋值构造一个aptr2,那么aptr将会被析构掉

    
    cout << aptr.get()< uptr(p);
   // unique_ptr uptr2(p);//不允许重复构造同一指针
    unique_ptr uptr2;
      
    uptr.get();
    uptr.reset();
    uptr.release();
    //uptr.swap();//交换两个智能指针
    uptr.get_deleter();//析构资源
    if(uptr)//智能指针判断是否为空
    {
        cout<<"uptrbu不为空"< sptr(p);
    weak_ptr wptr(sptr);
    // cout<< *wptr< wptr1=sptr;//允许隐式构造
    
    wptr.use_count();
    wptr.reset();
   shared_ptr sptr1( wptr);//弱智能指针提升为强智能指针
    cout<< *sptr1<
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/457638.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号