C++11 unique

tech2022-09-01  112

#include<iostream> #include<functional> #include<algorithm> #include<vector> #include<string> #include<deque> #include<list> using namespace std; void foo_constuct() {     //一般这种构造     std::unique_ptr<int> ptr ( new int(3));     //空构造     std::unique_ptr<int >ptr1 ;     //下面三种构造是错误的     /*std::unique_ptr<int> ptr2 = ptr;     std::unique_ptr<int> p3(p);     ptr1 = p;*/ }     void foo_reset() {     int* Neew = new int(3);     int* p = new int(5);     {         std::unique_ptr<int>pp(Neew);         pp.reset(p);

    } } void foo_release();//与auto一致,也不会释放原来的指针,只是简单的将自身清空。 void foo_move()//多了个move的用法 {     int* p = new int(3);     {         //unique_ptr交出其内部指针的所有权,而自身置空,内部指针不会释放。         std::unique_ptr<int>uptr(p);         std::unique_ptr<int>uptr2 = std::move(uptr);         //这里的调用就会出错,因为拷贝构造函数的存在,uptr实际上已经释放了其内部指针的所有权了         printf("%d\n", *uptr);     } } void foo_ary() {     std::vector<std::unique_ptr<int>> ary;     std::unique_ptr<int> ptr1(new int(3));     ary.push_back(std::move(ptr1));     //这里的调用就会出错,因为拷贝构造函数的存在,ptr11实际上已经释放了其内部指针的所有权了     printf("%d\n", *ptr1); } int main() {     foo_move();     //基本构造方法     foo_constuct();     //reset的使用方法和auto是一样的     foo_reset(); }

最新回复(0)