Fork me on GitHub
共 13 页: 首页 上一页 2 3 4 5 6 7 8 9 10 下一页 末页
摘要:1. 自定义new和delete的三个常见原因 我们先回顾一下基本原理。为什么人们一开始就想去替换编译器提供的operator new和operator delete版本?有三个最常见的原因: 为了检测内存使用错误。不能成功delete new出来的内存会造成内存泄漏。在new出来的内存上使用多于一 阅读全文
posted @ 2017-04-19 08:00 HarlanC 阅读 (262) 评论 (0) 编辑
摘要:1. new-handler介绍 当操作符new不能满足内存分配请求的时候,它就会抛出异常。很久之前,它会返回一个null指针,一些旧的编译器仍然会这么做。你仍然会看到这种旧行为,但是我会把关于它的讨论推迟到本条款结束的时候。 1.1 调用set_new_handler来指定全局new-handle 阅读全文
posted @ 2017-04-17 08:01 HarlanC 阅读 (428) 评论 (0) 编辑
摘要:1. TMP是什么? 模板元编程(template metaprogramming TMP)是实现基于模板的C++程序的过程,它能够在编译期执行。你可以想一想:一个模板元程序是用C++实现的并且可以在C++编译器内部运行的一个程序,它的输出——从模板中实例化出来的C++源码片段——会像往常一样被编译 阅读全文
posted @ 2017-04-15 12:54 HarlanC 阅读 (395) 评论 (1) 编辑
摘要:STL主要由为容器,迭代器和算法创建的模板组成,但是也有一些功能模板。其中之一叫做advance。Advance将一个指定的迭代器移动指定的距离: 从概念上来说,advance仅仅做了iter += d,但是advance并不是用这种方式实现的,因为只有随机访问迭代器支持+=操作。其他一些更加弱的迭 阅读全文
posted @ 2017-04-13 08:40 HarlanC 阅读 (590) 评论 (0) 编辑
摘要:1. 问题的引入——将operator*模板化 Item 24中解释了为什么对于所有参数的隐式类型转换,只有非成员函数是合格的,并且使用了一个为Rational 类创建的operator*函数作为实例。在继续之前建议你先回顾一下这个例子,因为这个条款的讨论是对它的扩展,我们会对Item 24的实例做 阅读全文
posted @ 2017-04-11 08:38 HarlanC 阅读 (366) 评论 (0) 编辑
摘要:智能指针的行为像是指针,但是没有提供加的功能。例如,Item 13中解释了如何使用标准auto_ptr和tr1::shared_ptr指针在正确的时间自动删除堆上的资源。STL容器中的迭代器基本上都是智能指针:当然,你不能通过使用“++”来将链表中的指向一个节点的内建指针移到下一个节点上去,但是li 阅读全文
posted @ 2017-04-10 08:36 HarlanC 阅读 (340) 评论 (0) 编辑
摘要:1. 使用模板可能导致代码膨胀 使用模板是节省时间和避免代码重用的很好的方法。你不需要手动输入20个相同的类名,每个类有15个成员函数,相反,你只需要输入一个类模板,然后让编译器来为你实例化20个特定的类和300个你需要的函数。(只有在被使用的情况下类模版的成员函数才会被隐式的实例化,所以只有在30 阅读全文
posted @ 2017-04-07 22:01 HarlanC 阅读 (424) 评论 (0) 编辑
摘要:1. 问题的引入——派生类不会发现模板基类中的名字 假设我们需要写一个应用,使用它可以为不同的公司发送消息。消息可以以加密或者明文(未加密)的方式被发送。如果在编译阶段我们有足够的信息来确定哪个信息会被发送到哪个公司,我们可以使用基于模板的解决方案: 这会工作的很好,但是假设有时候我们需要在发送信息 阅读全文
posted @ 2017-04-04 18:20 HarlanC 阅读 (291) 评论 (0) 编辑
摘要:1. class和typename含义相同的例子 问题:在下面的模板声明中class和typename的区别是什么? 答案:没有任何区别。当声明一个模板类型参数时,class和typename意味着相同的事情。一些程序员喜欢使用class,因为容易敲打。其他的(包括我)更加喜欢使用typename, 阅读全文
posted @ 2017-04-03 08:15 HarlanC 阅读 (566) 评论 (1) 编辑
摘要:1. 显示接口和运行时多态 面向对象编程的世界围绕着显式接口和运行时多态。举个例子,考虑下面的类(无意义的类), 考虑下面的函数(同样没有意义), 对于doProcessing中的w,我们可以这样说: 因为w被声明为Widget类型,w必须支持Widget接口。我们可以在源码中搜寻这个接口(例如,在 阅读全文
posted @ 2017-03-30 22:56 HarlanC 阅读 (366) 评论 (0) 编辑
共 13 页: 首页 上一页 2 3 4 5 6 7 8 9 10 下一页 末页