智能指针原理及实现(2)- unique_ptr

只允许基础指针的一个所有者。 可以移到新所有者(具有移动语义),但不会复制或共享(即我们无法得到指向同一个对象的两个unique_ptr)。 替换已弃用的 auto_ptr。 相较于 boost::scoped_ptr。 unique_ptr 小巧高效;大小等同于一个指针,支持 rvalue 引用,从而可实现快速插入和对 STL 集合的检索。在头文件<memory>中。

unique_ptr

为了避免和库里面的名称混淆,我自己实现的时候用的UniquePtr加以区分。

同一时刻,只能有一个unique_ptr指向某个内存区域,所以他是禁止拷贝的。unique_ptr本身是个对象,他生命周期结束时,会自动调用~unique_ptr(),将其所指对象销毁。

主要有这几个功能:

1、能写出异常安全的代码

2、

原文地址:https://www.cnblogs.com/howo/p/8468999.html

时间: 2024-11-05 22:56:58

智能指针原理及实现(2)- unique_ptr的相关文章

智能指针原理与简单实现(转)

以下实现没有考虑线程安全的问题. 智能指针:它的一种通用实现方法是采用引用计数的方法.智能指针将一个计数器与类指向的对象相关联,引用计数跟踪共有多少个类对象共享同一指针. 每次创建类的新对象时,初始化指针并将引用计数置为1: 当对象作为另一对象的副本而创建时,拷贝构造函数拷贝指针并增加与之相应的引用计数: 对一个对象进行赋值时,赋值操作符减少左操作数所指对象的引用计数(如果引用计数为减至0,则删除对象),并增加右操作数所指对象的引用计数:这是因此左侧的指针指向了右侧指针所指向的对象,因此右指针所

C/C++知识要点5——智能指针原理及自己定义实现

智能指针概述: 智能指针用来管理动态对象.其行为类似于常规指针,重要的差别是:它负责自己主动释放所指向的对象. C++ 11标准库提供两种智能指针:shared_ptr.unique_ptr 差别是:shared_ptr同意多个指针指向同一个对象:unique_ptr则独占所指向的对象. 另外.另一种weak_ptr的伴随类,它是一种弱引用.指向shared_ptr所管理的对象. 自己定义智能指针实现方法: 实现方法使用引用计数方法. 智能指针将一个计数器与类指向的对象相关联,引用计数跟踪一共同

C/C++知识要点5——智能指针原理及自定义实现

智能指针概述: 智能指针用来管理动态对象.其行为类似于常规指针,重要的区别是:它负责自动释放所指向的对象. C++ 11标准库提供两种智能指针:shared_ptr.unique_ptr 区别是:shared_ptr允许多个指针指向同一个对象:unique_ptr则独占所指向的对象. 另外,还有一种weak_ptr的伴随类,它是一种弱引用,指向shared_ptr所管理的对象. 自定义智能指针实现方法: 实现方法使用引用计数方法. 智能指针将一个计数器与类指向的对象相关联,引用计数跟踪一共有多少

智能指针原理与简单实现

当类中有指针成员时,一般有两种方式来管理指针成员:一是采用值型的方式管理,每个类对象都保留一份指针指向的对象的拷贝:另一种更优雅的方式是使用智能指针,从而实现指针指向的对象的共享. 智能指针(smart pointer)的一种通用实现技术是使用引用计数(reference count).智能指针类将一个计数器与类指向的对象相关联,引用计数跟踪该类有多少个对象共享同一指针.    每次创建类的新对象时,初始化指针并将引用计数置为1:当对象作为另一对象的副本而创建时,拷贝构造函数拷贝指针并增加与之相

C++ Primer 学习笔记_56_STL剖析(十一)(原boost库):详解智能指针(unique_ptr(原scoped_ptr) 、shared_ptr 、weak_ptr源码分析)

注意:现在boot库已经归入STL库,用法基本上还和boost类似 在C++11中,引入了智能指针.主要有:unique_ptr, shared_ptr, weak_ptr. 这3种指针组件就是采用了boost里的智能指针方案.很多有用过boost智能指针的朋友,很容易地就能发现它们之间的关间: std boost 功能说明 unique_ptr scoped_ptr 独占指针对象,并保证指针所指对象生命周期与其一致 shared_ptr shared_ptr 可共享指针对象,可以赋值给shar

智能指针分析及auto_ptr源码

简介 C++没有内存自动回收机制,对堆内存的管理就是简单的new和delete,每次new出来的内存都需要手动delete释放.但由于忘记.流程复杂或者异常退出等,都有可能导致没有执行delete释放内存,造成内存泄漏. 在实际工程中,我们往往希望将精力放在应用层上而不是费劲心思处理语言的细枝末节(内存释放),于是就有了最原始的只能指针auto_ptr. 智能指针原理 智能指针是一种资源管理类,这个类在构造函数中传入一个原始指针,在析构函数中释放传入的指针.智能指针都是栈上的对象,所以当函数(或

智能指针的概念和实现

概念 智能指针从字面上看,首先是一个对象,而它的行为(或接口)是在模拟一个指针,但又比指针更加智能.指针的主要作用是引用资源,指针的最大问题是在复杂情况下很难管理好它指向的资源的生命周期.因此智能指针要做的就是在管理资源生命周期这件事情上更加"智能".C++11已经在<memory>模块中提供了常用的三种智能指针,它们分别是 unique_ptr, shared_ptr 和 weak_ptr. 但理解智能指针的原理和实现细节也是十分有意义的.了解原理可以保证更加合理的使用标

SmartPointer_智能指针

动态内存 C++中程序用堆来存储动态分配(dynamically allocate)的对象——即那些在程序运行时分配的对象. 动态内存的生存期由程序控制,也就是当动态对象不再使用时,我们必须显示的销毁它们. But众所周知(王小波句式),正确的管理动态内存是非常棘手的.如果忘了释放内存,就会导致内存泄漏:如果在还有指针引用内存时就去释放那块内存,那么那个指针就会变为一个引用非法内存的指针.thorny problem! 智能指针原理 So, 为了更容易更安全的使用动态内存,新的标准库提供了智能指

C++11中的智能指针

在C++11中,引入了智能指针.主要有:unique_ptr, shared_ptr, weak_ptr.这3种指针组件就是采用了boost里的智能指针方案.很多有用过boost智能指针的朋友,很容易地就能发现它们之间的关间: std boost 功能说明 unique_ptr scoped_ptr 独占指针对象,并保证指针所指对象生命周期与其一致 shared_ptr shared_ptr 可共享指针对象,可以赋值给shared_ptr或weak_ptr.指针所指对象在所有的相关联的share