C++中各种智能指针的实现及弊端(三)

文章目录

  • C++中各种智能指针的实现及弊端(三)
    • 一: std::unique_ptr
    • 二、**std::unique_ptr的缺陷**

一: std::unique_ptr

C++11中开始提供更靠谱的unique_ptr
std::unique_ptr文档

int main()
{unique_ptr<Date> up(new Date);// unique_ptr的设计思路非常的粗暴-防拷贝,也就是不让拷贝和赋值。unique_ptr<Date> copy(ap);return 0;
}

unique_ptr的实现原理:简单粗暴的防拷贝,下面简化模拟实现了一份UniquePtr来了解它的原理

// 模拟实现一份简答的UniquePtr,了解原理
template<class T>
class UniquePtr
{public:UniquePtr(T * ptr = nullptr): _ptr(ptr){}~UniquePtr(){if(_ptr)delete _ptr;}T& operator*() {return *_ptr;}T* operator->() {return _ptr;}private://这里把成员函数设为私有的目的是防止用户自己在类外进行实现// C++98防拷贝的方式:只声明不实现+声明成私有UniquePtr(UniquePtr<T> const &);UniquePtr & operator=(UniquePtr<T> const &);// C++11防拷贝的方式:deleteUniquePtr(UniquePtr<T> const &) = delete;UniquePtr & operator=(UniquePtr<T> const &) = delete;
private:T * _ptr;
};

二、std::unique_ptr的缺陷

  • 没有构造删除器,上面实现的只能释放new出来的空间,不能释放malloc出来的空间和文件流指针

C++中各种智能指针的实现及弊端(三)相关推荐

  1. C++中各种智能指针的实现及弊端(四)

    C++中各种智能指针的实现及弊端(四) 文章目录 C++中各种智能指针的实现及弊端(四) 一.std::shared_ptr 二.std::shared_ptr的线程安全问题: 一.std::shar ...

  2. C++中各种智能指针的实现及弊端(五)

    C++中各种智能指针的实现及弊端(五) 文章目录 C++中各种智能指针的实现及弊端(五) 一.std::shared_ptr的循环引用 **二.循环引用分析:** 三.解决方法: 四.weak_ptr ...

  3. C++中各种智能指针的实现及弊端(二)

    C++中各种智能指针的实现及弊端(二) 文章目录 C++中各种智能指针的实现及弊端(二) 一:实现auto_ptr 二.auto_ptr的问题及解决办法 一:实现auto_ptr C ++98版本的库 ...

  4. C++中各种智能指针的实现及弊端(一)

    C++中各种智能指针的实现及弊端(一) 文章目录 C++中各种智能指针的实现及弊端(一) 一.为什么需要智能指针? 二.智能指针的使用及原理: 一.为什么需要智能指针? 首先看一段代码: #inclu ...

  5. c语言智能指针是什么,C ++中的智能指针

    原标题:C ++中的智能指针 考虑以下带有普通指针的简单C ++代码. MyClass *ptr = new MyClass(); ptr->doSomething(); // We must ...

  6. 标准库中的智能指针shared_ptr

    智能指针的出现是为了能够更加方便的解决动态内存的管理问题.注:曾经记得有本书上说可以通过vector来实现动态分配的内存的自动管理,但是经过试验,在gcc4.8.5下是不行的.这个是容易理解的,vec ...

  7. c++ 智能指针_详解 C++ 11 中的智能指针

    C/C++ 语言最为人所诟病的特性之一就是存在内存泄露问题,因此后来的大多数语言都提供了内置内存分配与释放功能,有的甚至干脆对语言的使用者屏蔽了内存指针这一概念.这里不置贬褒,手动分配内存与手动释放内 ...

  8. c+智能指针源码分析_C ++中的智能指针

    c+智能指针源码分析 In this article, we'll take a look at how we can use Smart Pointers in C++. 在本文中,我们将研究如何在 ...

  9. C++ 中的智能指针以及如何使用它们

    在本文中,我们将讨论 C++ 中的智能指针.什么是智能指针,为什么以及如何正确使用它们? 指针用于访问程序外部的资源--比如堆内存.因此,为了访问堆内存(如果在堆内存中创建了任何东西),需要使用指针. ...

最新文章

  1. Github 高赞的 YOLOv5 引发争议?Roboflow 和开发者这样说...
  2. dd指令打包iso文件 linux_从零开始学Linux运维|33.文件的打包压缩和解压
  3. 从“大数据”到“智能数据”
  4. 使用Java进行串口SerialPort通讯
  5. Thunder团队Beta周贡献分分配结果
  6. 数据结构之:链表详解
  7. Java中已经存在了十几年的一个bug...
  8. 入门monkeyrunner7-monkeyrunner demo3 EasyMonkeyDevice+hierarchyviewer +monkeyrunner+截图对比
  9. 防盗链python_python一行代码,实现网页视频下载
  10. 概率论与数理统计图解
  11. c语言中的字符数组和字符串之间的关系
  12. pandas的认识与dataframe的认识 day04课件代码
  13. VC2010编译源代码编辑控件scintilla
  14. Unity开发Android游戏(三)虚拟摇杆之_Easy Touch 5
  15. 【微动弹性带方法——续鞍点】
  16. Linux snapcraft vscode报错snap is unusable due to missing files解决方法
  17. java实现两个实体类共有字段合二为一
  18. 新版二开cp盲盒小纸条月老小程序源码【源码好优多】
  19. 开启Windows远程桌面
  20. python关于二手房的课程论文_用Python对2019年二手房价格进行数据分析

热门文章

  1. linux中ps aux和ps -ef下显示的意义
  2. Redis的数据类型之String
  3. iOS开发-编译出错 duplicate symbols for architecture x86_64
  4. ASP中文件上传组件ASPUpload介绍和使用方法
  5. DB2更改数据文件路径
  6. SQL Server 2008 : 基于策略的管理(Policy-Based Management)
  7. CodeForces - 1373E Sum of Digits(贪心)
  8. HDU - 3530 Subsequence(单调队列+思维)
  9. Pollard_rho算法+Miller_Rabin算法(大素数的判断与素因子分解)(模板)
  10. HDOJ1536 S-nim