目录

一、C++参考文档

二、仿写代码

三、Auto_Ptr遇到的问题


一、C++参考文档

二、仿写代码

namespace lwc{template<class _Ty>class My_Auto_ptr {private:bool _Owns;_Ty* _Ptr;public://改变对象名称typedef _Ty element_type;//构造函数My_Auto_ptr(_Ty* _ptr=0):_Owns(_ptr!=0),_Ptr(_ptr) {}//拷贝赋值皮在拷贝构造或赋值操作时,我们必须作特殊的处理来保证这个特性。auto_ _ptr//的做法是"所有权转移”,即拷贝或赋值的源对象将失去对"裸”指针的所有权,所以,与一般拷贝构造函数,赋值函数不同,auto_ptr 的拷贝构造函数,赋值函数的参数为引用用而不是常引用(const reference)。My_Auto_ptr(const My_Auto_ptr<_Ty>& _Y) :_Owns(_Y._Owns), _Ptr(_Y._Ptr) {}//赋值函数My_Auto_ptr<_Ty>& operator=(const My_Auto_ptr<_Ty>& _Y) {if (this != &_Y) {if (_Ptr != _Y._Ptr) {if (_Owns) {delete _Ptr;}_Owns = _Y._Owns;}else if (_Y._Owns) {_Owns = true;}_Ptr = _Y.release();}return (*this);}//析构函数~My_Auto_ptr() {if (_Owns) {delete _Ptr;}_Ptr = NULL;}//取对象_Ty& operator*()const {return (*_Ptr);}//去指针_Ty* operator->()const {return _Ptr;}_Ty* get()const {return _Ptr;}_Ty* realease()const {((My_Auto_ptr<_Ty>*)this)->_Owns = false;return _Ptr;}};
}

三、Auto_Ptr遇到的问题

1、因为auto_ptr析构的时候肯定会删除他所拥有的那个对象,所以我们就要注意了,一个萝卜一个坑,两个auto_ptr 不能同时拥有同一个对象。像这样:

因为ap1与ap2都认为指针p是归它管的,在析构时都试图删除p,两次删除同一个对象的行为在
C++标准中是未定义的。所以我们必须防止这样使用auto_ ptr。

2、因为auto_ptr 的析构函数中删除指针用的是delete,而不是delete [],所以我们不应该用auto_ ptr 来管理一个数组指针。
3、构造函数的explicit 关键词有效阻止从一个裸指针隐式转换成auto_ ptr 类型。
4、因为auto_ ptr不具有值语义(value semantics),所以auto_ ptr不能被用在stl标准容器中。

std::Auto_Ptr(仿写)相关推荐

  1. C++智能指针剖析(上)std::auto_ptr与boost::scoped_ptr

    1. 引入 C++语言中的动态内存分配没有自动回收机制,动态开辟的空间需要用户自己来维护,在出函数作用域或者程序正常退出前必须释放掉. 即程序员每次 new 出来的内存都要手动 delete,否则会造 ...

  2. std::auto_ptr简单使用

    auto_ptr 为c++的智能指针,主要解决的问题是C++的内存泄露问题,但是本质的原因是智能指针的本质其实是一个栈对象,所以才能被自动回收,假如为堆对象的话,则需要程序员自己回收. 实例代码 头文 ...

  3. C++ shared_ptrweak_ptr的简单介绍和仿写

    文章目录 shared_ptr 一.shared_ptr的简单介绍 二.shared_ptr的使用 1.函数介绍 2.使用 三.shared_ptr对象创建方法的讨论 1. 有两种常见的创建的方法: ...

  4. 源码推荐:仿写映客直播 ,快速切换主题 ,星星评分控件,表格样式,可以横向移动的表格, 仿微信键盘-

    仿写映客直播(上传者:五仁月饼) 工作之余写的,基于IJKPlayer播放,对内存做了处理.目前已完成直播列表和直播间的搭建,后续还会慢慢完善. 项目地址 publishImageAndVideoAn ...

  5. html搜狐热搜列表仿写,GRE高分范文不能看过就算 学会仿写才能带来真正提高

    可以说所有的写作都是从模仿开始.GRE作文同样不例外.通过参考他人的好文章,学习别人的写法,最后写出自己的文章是非常实用的作文学习方式.不过,模仿也需要讲究方法,单纯模仿并不会让大家有太多的收获.掌握 ...

  6. 仿写thinkphp的I方法

    自己定义一个方法仿写thinkphp的I 方法 <?php function I($key="",$default='',$function="") {$ ...

  7. 用 div 仿写 input 和 textarea 功能

    div仿写input和textarea input不能换行,textarea也不能跟随内容多少而增加高度. contenteditable = true; <div class="ms ...

  8. android sdk build-tools_从零开始仿写一个抖音App——视频编辑SDK开发(一)

    本文首发于微信公众号--世界上有意思的事,搬运转载请注明出处,否则将追究版权责任.交流qq群:859640274. 大家好久不见,又有一个多月没有发文章了.不知道还有哪些读者记得我的 从零开始仿写抖音 ...

  9. [Electron]仿写一个课堂随机点名小项目

    自从前几个月下了抖音,无聊闲暇时就打会打开抖音,因为打开它有种莫名其妙打开了全世界的感觉... 无意中看到这个小视频:随机点名 于是仿写了一个课堂点名小项目,算是对Electron的一个简单的认识,有 ...

最新文章

  1. InnoDB redo log格式-物理log
  2. java Map 怎么遍历
  3. Winsows VISTA启动过程解析
  4. 前端学习(2890):如何短时间内实现v-for 模板编译321
  5. android rtsp协议转http协议_Http协议和Https协议
  6. 蓝桥杯 ALGO-150 算法训练 6-1 递归求二项式系数值
  7. paip.自动import的实现跟java.lang.SecurityException Prohibited package name java
  8. 管家婆sql2005数据库一键安装
  9. Deeping Learning学习与感悟——《深度学习工程师》_4
  10. b站视频突破2倍方法,3倍?4倍?可以开10倍!!!
  11. 【重磅】2021年通信行业白皮书汇总下载(免费)
  12. 电气火灾监控系统在某市新能源有轨电车示范线工程的应用
  13. 三、kotlin的类和对象(二)
  14. 自动化测试,纸质图书 流程图,代码
  15. JAVA多线程终止线程、退出线程、Interrupt()方法、苦逼的搬砖工
  16. Qt入门学习——Qt Creator的使用
  17. 核心案例 | 南京理工大学空地协同编队控制系统建设项目
  18. org.springframework.dao.DataIntegrityViolationException: Error attempting to get column
  19. buuuctf-Check_1n
  20. ps神经网络滤镜不能下载,ps神经网络滤镜用不了

热门文章

  1. day38 mycql 初识概念,库(增删改查),表(增删改)以及表字段(增删改查),插入更新操作...
  2. 内连接与外连接的时候场景
  3. 电商收付通系列⑪ ,下载账单
  4. Quorum Raft
  5. AWS入门指南之三:一致性问题
  6. 珠峰登顶在即,5G如何先行?
  7. https免费证书配置
  8. 世界上最难的“沙雕”游戏被AI攻破了
  9. 美国排名前10芯片公司的特点!
  10. 【超详细~】手把手带你推导傅里叶级数~