,下面这段代码会引起异常,因为所有权已经转移,而通过by reference方式传递auto_ptr更是糟糕的
若改为: const auto_ptr<int> p(new int);则会在编译时提示错误.因此我们可以通过常数型auto_ptr来终结所有权转移,它并不是表示你不能更改auto_ptr所拥有的对象,而是不能更改auto_ptr的拥有权,就此特性而言,它比较类似常数指针,而不是指向常数的指针.
复制代码
template <typename T>
void bad_print(auto_ptr<T> p)
{
if(p.get()==NULL)
cout<<"null";
else
cout<<*p;
}
int main(int argc, char* argv[])
{
auto_ptr<int> p(new int);
*p = 42;
bad_print(p);
*p = 3;
return 0;
}
复制代码
2,auto_ptr之间不能共享拥有权,一个auto_ptr不能指向另一个auto_ptr所拥有的对象,否则当一个指针删除该对象后,就糟糕了.auto_ptr不能指向数组,因为它是通过delete而不是delete[]来释放其所拥有的对象.它也不是一个引用计数型指针.因为在拷贝和赋值后,原来的auto_ptr和新产生的auto_ptr并不相等,而是原auto_ptr会交出拥有权,而不是拷贝给新auto_ptr,因此也不要将auto_ptr作为标准容器的元素.
3,下面重载的输出运算符的第二个参数是一个const reference,所以并没有发生拥有权的转移.
复制代码
template <class T>
ostream& operator<< (ostream& strm, const auto_ptr<T>& p)
{
// does p own an object ?
if (p.get() == NULL) 
{
strm << "NULL";         // NO: print NULL
}
else {
strm << *p;             // YES: print the object
}
return strm;
}
复制代码
4,容器可分为两类:1)序列式容器,这是ordered collection,每个元素都有固定位置,取决于插入时机和地点,和元素值无关.它们是:vector,deque,list;2)关联式容器.这是sorted collection,元素位置取决于特定的排序准则,它们是:set,multiset,map,multimap.
关联式容器自动对其元素排序,并不意味着它们就是用来排序的,这只迭是它的一个副作用而已.
5,每个容器将其迭代器以嵌套的方式定义于内部,因此各种迭代器的接口相同,类型却不同.迭代器有以下两种类型:1)双向迭代器.可以双向行进:以递增运算前进或以递减运算后退,list,set,multiset,map和multimap提供的迭代器都是此类.2)随机存取迭代器.不仅具备双向迭代器的所有属性,还具备随机访问能力.它们提供了”迭代器算术运算”必要的操作符.可以对迭代器增加或减少一个偏移量,处理迭代器之间的距离,或是使用<和>之类的相对关系操作符来比较两个迭代器.vector,deque和strings所提供的迭代器都属于此类.为了写出尽可能与容器类型无关的泛型程序代码,最好不使用随机存取迭代器的特有操作.
本文转自Phinecos(洞庭散人)博客园博客,原文链接:http://www.cnblogs.com/phinecos/archive/2008/08/19/1270922.html,如需转载请自行联系原作者

《C++标准程序库》读书笔记(二)相关推荐

  1. 深入理解JVM读书笔记二: 垃圾收集器与内存分配策略

    3.2对象已死吗? 3.2.1 引用计数法 给对象添加一个引用计数器,每当有一个地方引用它的地方,计数器值+1:当引用失效,计数器值就减1;任何时候计数器为0,对象就不可能再被引用了. 它很难解决对象 ...

  2. 《Docker 技术入门与实践》-读书笔记二

    <Docker 技术入门与实践>-读书笔记一 <Docker 技术入门与实践>-读书笔记二 一.数据管理 用户在使用 Docker 的过程中,往往需要能查看容器内应用产生的数据 ...

  3. 《Introduction To Modern Cryptography》读书笔记二

    <Introduction To Modern Cryptography>读书笔记二 本笔记纯粹个人读书习惯与相应见解,内容归纳完全出于个人需要与个人局限,如有修改意见(比如哪儿应该是值得 ...

  4. oracle直查和call哪个更快,让oracle跑的更快1读书笔记二

    当前位置:我的异常网» 数据库 » <>读书笔记二 <>读书笔记二 www.myexceptions.net  网友分享于:2013-08-23  浏览:9次 <> ...

  5. 《How Tomcat Works》读书笔记(二)

    <How Tomcat Works>读书笔记(二) 这是<How Tomcat Works>第一二章的读书笔记.第一张主要写了一个静态资源处理的web服务器,第二章加了对ser ...

  6. 3D游戏设计读书笔记二

    3D游戏设计读书笔记二 一.简答题 • 解释 游戏对象(GameObjects) 和 资源(Assets)的区别与联系.   GameObjects是一个具体的实例,Assets是包括诸多游戏素材的资 ...

  7. 《李元芳履职记》读书笔记二 IT技术管理的沟通与团队建设

    <李元芳履职记>读书笔记二 接一 https://blog.csdn.net/qq_45937199/article/details/103305223 IT技术人员从技术岗走向管理岗,所 ...

  8. python图像处理《数字图像处理与python实现》读书笔记二:空间滤波

    文章目录 重要! 第三章 空间滤波 概览 3.1 空间滤波基础 3.1.1 空间滤波的机理 3.1.2 空间滤波器模板 3.2 平滑处理 3.2.1 平滑线性空间滤波器 3.2.2 统计排序滤波器 3 ...

  9. 第一行代码 Android读书笔记(二)

    第一行代码 Android读书笔记 第三章 软件也要拼脸蛋-UI开发的点点滴滴 常用控件的使用方法 详解4种基本布局 自定义控件 最常用和最难用的控件-ListView 更加强大的滚动控件-Recyc ...

  10. 《淘宝技术这十年》读书笔记 (二).Java时代的脱胎换骨和坚若磐石

    马云说过"一个好的东西往往是是说不清楚的",姑且不论这句话的对与错.但我真的很佩服<淘宝技术这十年>这本书的作者子柳,能够通过淘宝的一些故事,按照时间顺序和IT发展的各 ...

最新文章

  1. 成贤学院计算机组成原理,东南大学成贤学院计算机硬件课程设计报告解读.doc...
  2. nova api 分析
  3. 2016012101小学四则运算练习软件项目报告
  4. numpy中的matrix矩阵处理
  5. Scala 2.13.1 整合 Spring Boot 2.2.1开发web应用完整pom文件
  6. web第五章 json
  7. [java] javax.el.PropertyNotFoundException: Property 'id' not found on type bean.Student
  8. 前端学习(一) html介绍和head标签
  9. 管理Jenkins作业配置
  10. WebApp的前端所遇问题
  11. 对大脑有益的16种食物_对大脑有益的食物有哪些?
  12. sql设为简单模式sql_SQL模式演练
  13. Kafka Simple Consumer
  14. iPhone模拟器截图
  15. 统计学——卡方检验和卡方分布
  16. 通达信股本变迁文件(gbbq)解密方法
  17. 集成创新,拓展兼容--红旗Linux桌面版5.0隆重发布(转)
  18. c# 向Excel文件写入数据(Workbook 和Worksheet )
  19. 35岁研发经理,月薪5W+,每年涨薪6-8K,特别焦虑,网友评论区吵翻了
  20. 最简单的makefile编写练习【main.c addc.c addc.h makefile】

热门文章

  1. CMMB手机电视入网咋就这么难?
  2. 余弦 matlab 幅度谱,数字图像处理_旋转与幅度谱(含MATLAB代码)
  3. 什么样的联系人管理软件最有效?这里有管理联系人的3款实用软件
  4. mysql front 垃圾_MySQL_Front 的缺点
  5. c++邮递员投递经过特定点_关于中国邮递员问题和欧拉图应用
  6. 渗透测试报告模板_渗透测试报告编写的几个小技巧
  7. 计算机桌面通过网络在拼接屏上显示,一种多个拼接屏实时同步显示方法与流程...
  8. JS实现本地文件选择
  9. Linux操作系统基本知识
  10. pygame 绘制爱心函数 r = 1-cos(θ). Tag: python | 图形界面 | GUI