#include<memory>intmain(){// 创建一个unique_ptr,指向一个动态分配的int对象std::unique_ptr<int>ptr(newint(42));// 使用指针操作符和解引用操作符访问所指向对象的值std::cout<<*ptr<<std::endl;// 输出: 42// 通过移动构造函数将所有权转移给另一个unique_ptrstd::unique_pt
所以,当使用unique_ptr时,在任何一个资源上最多只能有一个unique_ptr,当该unique_ptr被破坏时,该资源将被自动声明。 另外,由于任何资源只能有一个unique_ptr,所以任何创建unique_ptr副本的尝试将导致编译时错误。 unique_ptr<A> ptr1 (new A); // Error: can't copy unique_ptr unique_ptr<A> ptr2 = ...
1std::unique_ptr<int>u_p1();2std::unique_ptr<int> u_p2(nullptr); 创建unique_ptr指针,且明确指向 1std::unique_ptr<int> u_p3(newint); 创建空unique_ptr指针,且明确指向已经存在的unique_ptr指针内存 1std::unique_ptr<int> u_p4(newint);2std::unique_ptr<int> u_p5(std::move(u_p4));...
unique_ptr 是一个独享所有权的智能指针,它提供了严格意义上的所有权。它取代了C++98中的auto_ptr。 unique_ptr对象包装一个原始指针,并负责其生命周期。当该对象被销毁时,会在其析构函数中删除关联的原始指针。 unique_ptr具有->和*运算符重载符,因此它可以像普通指针一样使用。 #include <iostream> #include...
std::unique_ptr<int> ptr3 = std::move(ptr1); // 正确:可以移动unique_ptr 3. weak_ptr weak_ptr是对一个shared_ptr所管理对象的弱引用。它不会增加引用计数,因此不会延长对象的生命周期。weak_ptr主要用于解决shared_ptr之间的循环引用问题。 语法: cpp std::weak_ptr<T> wptr = ptr; // ptr是...
shared_ptr的用法 从名字上看shared_ptr是共享指针,意味着我们可以复制shared_ptr,复制出的智能指针指向同一个内部数据指针(即被智能指针包装的真正数据)。 构造shared_ptr 有多种方法可以构造shared_ptr,下面代码中有4种构造方式: int *p = new int(1); ...
unique_ptr是auto_ptr的继承者,对于同一块内存只能有一个持有者,而unique_ptr和auto_ptr唯一区别就是unique_ptr不允许赋值操作,也就是不能放在等号的右边(函数的参数和返回值例外),这一定程度避免了一些误操作导致指针所有权转移,然而,unique_str依然有提供所有权转移的方法move,调用move后,原unique_ptr就会失效,...
C++智能指针介绍(shared_ptr,enable_shared_from_this,weak_ptr,unique_ptr) 一、shared_ptr shared_ptr,使用引用计数实现对同一块内存可以有多个引用,在最后一个引用被释放时,指向的内存才释放,这也是和unique_ptr最大的区别。基本用法: 输出: 这个智能指针的特性“在最后一个引用被释放时,指向的内存才释放”...
C++里面的四个智能指针: auto_ptr, shared_ptr, weak_ptr, unique_ptr 其中后三个是c++11支持,并且第一个已经被11弃用。 为什么要使用智能指针 智能指针的作用是管理一个指针,因为存在以下这种情况:申请的空间在函数结束时忘记释放,造成内存泄漏。使用智能指针可以很大程度上的避免这个问题,因为智能指针就是一个类...
C++11 新特性之智能指针(shared_ptr, unique_ptr, weak_ptr),这是C++11新特性介绍的第五部分,涉及到智能指针的相关内容(shared_ptr,unique_ptr,weak_ptr)。shared_ptrshared_ptr基本用法shared_ptr采用引用计数的方式管理所指向的对象。当有一个新的shared_ptr指向同一