C++11:19unique_ptr独占的智能指针

2021-01-15 09:11

阅读:603

标签:type   其他   一个   ble   size   所有权   原来   智能   移动   

19、unique_ptr独占的智能指针

0、课前秀

1、unique_ptr

  • 不允许通过赋值将一个unique_ptr赋值给另外一个unique_ptr。
unique_ptr myPtr(new T);
unique_ptr myOhterPtr = myPtr; //错误:不能复制
  • 可以通过函数返回给其他的unique_ptr,还可以通过std::move来转移到其他的unique_ptr,这样它本身就不再拥有原来指针的所有权了。
unique_ptr myPtr(new T); //Okay
unique_ptr myOhterPtr = std::move(myPtr);//Okay,
unique_ptr ptr = myPtr; //错误,只能移动,不可复制

2、用make_unique方法来创建智能指针

  • unique_ptr不像shared_ptr那样可以通过make_shared方法来创建智能指针。
//支持普通指针
template inline
typename enable_if::value, unique_ptr>::type
    make_unique(Args&&... args)
{
    return unique_ptr(new T(std::forward(args)...));
}

//支持动态数组
template inline
typename enable_if::value && extent::value==0,unique_ptr>::type
    make_unique(size_t size)
{
    typedef typename remove_extent::type U;
    return unique_ptr(new U[size]());
}

//过滤掉定长数组的情况
template
typename enable_if::value != 0,void>::type 
    make_unique(Args&&...) = delete;

ReadMe

  • 20200522工作期间看了会儿,感觉内容不如看《CPP Primer》第5版的一章节呢,没有get好,留着后期再复习吧。

C++11:19unique_ptr独占的智能指针

标签:type   其他   一个   ble   size   所有权   原来   智能   移动   

原文地址:https://www.cnblogs.com/fewolflion/p/12937891.html


评论


亲,登录后才可以留言!