代码改变世界

随笔分类 -  C/C++

C++的new为什么那么"新"?

2011-04-25 14:55 by Aga.J, 420 阅读, 收藏,
摘要: 转自http://www.builder.com.cn/2008/0104/696370.shtml(它也是转的。。)“new”是C++的一个关键字,同时也是操作符。关于new的话题非常多,因为它确实比较复杂,也非常神秘,下面我将把我了解到的与new有关的内容做一个总结。new的过程当我们使用关键字new在堆上动态创建一个对象时,它实际上做了三件事:获得一块内存空间、调用构造函数、返回正确的指针。当然,如果我们创建的是简单类型的变量,那么第二步会被省略。假如我们定义了如下一个类A:class A { int i; public: A(int _i) :i(_i*_i) {} void Say( 阅读全文

C++中include头文件到底会发生什么事?

2011-04-24 20:50 by Aga.J, 689 阅读, 收藏,
摘要: 当xx.c文件在被编译的时候,第一步要做的就是预处理,而我们知道预处理会处理宏定义,条件编译,和头文件。但是到底是如何处理头文件的呢?预处理的最终结果可以看做是把头文件中的所有内容都放到xx.c文件中(当然这个是个递归过程)。这样一来,编译会花费更加长的时间,因为在编译器最终分析final.c的文件中的词法和语法时,它需要从头到尾一行一行的处理,所以xx.c文件中的真正需要执行的代码,可能需要经过很多行无效的处理后才到达。这样也提示我们不要随便将c文件需要的头文件include放在其对应的h文件中,这样会使得其他c文件include该h文件时带来不必要的开销。 更加详细的内容,请看这个博客h. 阅读全文

STL源码剖析之迭代器概念与traits编程技巧--学习笔记

2011-04-12 10:08 by Aga.J, 546 阅读, 收藏,
摘要: 15 Iterator是一种抽象的设计概念:design pattern中有一种iterator的模式: 提供一种外部方法,使之可以依序访问聚合器所含的各个元素,而又无需暴露该聚合物的内部表述方式(也就是说做到和聚合物的类型无关);STL的中心思想: 将数据容器和算法分开,彼此独立设计,最后使用粘合剂将他们粘合起来。要做到 容器的泛型化我们可以借助class template,要做到 算法的泛型化,我们可以借助 function template。而他们之间的交合,就需要细致考虑。下面是三者之间完美结合的例子Template<class InputIterator, class T> 阅读全文

STL源码剖析之开篇与内存配置器--学习笔记

2011-04-09 13:47 by Aga.J, 856 阅读, 收藏,
摘要: 1 从底层来看,STL带给我们一套具有实用价值的零部件,以及一个整合起来的整体,STL中组件之间耦合度很低,组件之间可以互相关联整合。2 STL以泛型思维,描述了很多抽象概念,以抽象概念为主体而不是依赖于实际的类3 STL六大组件:容器 : 数据结构(容纳数据)是一种class template算法 : 常用的算法,是一种function template迭代器:容器和算法之间的胶合剂,也是一种泛型组件,“泛型指针”,每个容器都有自己的迭代器,只有容器自己才知道如何使用自己的迭代器来完成迭代。仿函数:??适配器:修饰容器或者仿函数或者迭代器接口的东西,也就是改变了被适配的东西,提供了新的接口。 阅读全文