码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2020-05-22 16:45:17      阅读:59      评论:0      收藏:0      [点我收藏+]

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

19、unique_ptr独占的智能指针

0、课前秀

1、unique_ptr

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

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

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

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

//过滤掉定长数组的情况
template<class T, class... Args>
typename enable_if<extent<T>::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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!