自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(26)
  • 资源 (4)
  • 收藏
  • 关注

原创 More Effective C++ Item 附2:一个auto_ptr的实现实例

More Effective C++的前言、导读和附1(侯捷译),以及在 “C++ 中计算物件个数”和“为智能指标实作 operator->*”(陈崴译,原发表于程序员杂志),可在侯捷的站点下载到。 一个auto_ptr的实现实例Items M9、M10、E26、E31和E32证明了auto_ptr模板类的非同寻常的作用。不幸的是,目前很少有编译器地提供了一个“正确”的实现(注1)。Ite

2002-03-31 15:46:00 1557

原创 More Effective c++ Item M29:引用计数

1.1 Item M29:引用计数引用计数是这样一个技巧,它允许多个有相同值的对象共享这个值的实现。这个技巧有两个常用动机。第一个是简化跟踪堆中的对象的过程。一旦一个对象通过调用new被分配出来,最要紧的就是记录谁拥有这个对象,因为其所有者--并且只有其所有者--负责对这个对象调用delete。但是,所有权可以被从一个对象传递到另外一个对象(例如通过传递指针型参数),所以跟踪一个对象的所有权是很困

2002-03-31 15:44:00 1984

原创 More Effective C++ Item M30:代理类

1.2 Item M30:代理类虽然你和你的亲家可能住在同一地理位置,但就整个世界而言,通常不是这样的。很不幸,C++还没有认识到这个事实。至少,从它对数组的支持上可以看出一些迹象。在FORTRAN、BASIC甚至是COBOL中,你可以创二维、三维乃至n维数组(OK,FORTRAN只能创最多7维数组,但别过于吹毛求疵吧)。但在C++中呢?只是有时可以,而且也只是某种程度上的。这是合法的:int d

2002-03-31 15:44:00 1515

原创 More Effective C++ Item M32:在未来时态下开发程序

2. 杂项我们现在到了接近结束的部分了,这章讲述的是一些不属于前面任一章节的指导原则。开始两个是关于C++软件开发的,描述的是设计适应变化的系统。面向对象的一个强大之处是支持变化,这两个条款描述具体的步骤来增强你的软件对变化的抵抗能力。然后,我们分析怎么在同一程序中进行C和C++混合编程。这必然导致考虑语言学之外的问题,但C++存在于真实世界中,所以有时我们必须面对这种事情。最后,我将概述C++语

2002-03-31 15:44:00 977

原创 More Effective C++ Item M34:如何在同一程序中混合使用C++和C

Item M34:如何在同一程序中混合使用C++和C许多年来,你一直担心编制程序时一部分使用C++一部分使用C,就如同在全部用C编程的年代同时使用多个编译器来生成程序一样。没办法多编译器编程的,除非不同的编译器在与实现相关的特性(如int和double的字节大小,传参方式)上相同。但这个问题在语言的标准化中被忽略了,所以唯一的办法就是两个编译器的生产商承诺它们间兼容。C++和C混合编程时同样是这个

2002-03-31 15:44:00 1450 1

原创 More Effective C++ Item M35:让自己习惯使用标准C++语言

Item M35:让自己习惯使用标准C++语言自1990年出版以来,《The Annotated C++ Reference Manual 》(见原书P285,附录:推荐读物)是最权威的参考手册供程序员们判断什么是C++拥有的而什么不是。在它出版后的这些年来,C++的ISO/ANSI标准已经发生了大大小小的变化了(主要是扩充)。作为权威手册,它已经不适用了。在《ARM》之后C++发生的变化深远地影

2002-03-31 15:44:00 2027

原创 More Effective C++ Item M31:让函数根据一个以上的对象来决定怎么虚拟

1.3 Item M31:让函数根据一个以上的对象来决定怎么虚拟有时,借用一下Jacqueline Susann的话:一次是不够的。例如你有着一个光辉形象、崇高声望、丰厚薪水的程序员工作,在Redmond,Wshington的一个著名软件公司--当然,我说的就是任天堂。为了得到经理的注意,你可能决定编写一个video game。游戏的背景是发生在太空,有宇宙飞船、太空站和小行星。在你构造的世界中的

2002-03-31 15:43:00 1441

原创 More Effective C++ Item M33:将非尾端类设计为抽象类

Item M33:将非尾端类设计为抽象类假设你正在从事一个软件项目,它处理动物。在这个软件里,大多数动物能被抽象得非常类似,但两种动物--晰蜴和小鸡--需要特别处理。显然,晰蜴和小鸡与动物类的联系是这样的:        Animal         | |         / /        /   /       /     /    Lizard Chicken动物类处理所有动物共有的特性

2002-03-31 15:43:00 1432

原创 C与C++中的异常处理

1.     异常和标准C对它的支持(前言略)1.1     异常分类    基于Dr. GUI的建议,我把我的第一个专栏投入到“程序异常”的系列上。我认识到,“exception”这个术语有些不明确并和上下文相关,尤其是C++标准异常(C++ standard exceptions)和Microsoft的结构化异常(structured exception handling)。不幸的

2002-03-01 08:54:00 1837 1

原创 C与C++中的异常处理8

1.     自动删除,类属new和delete、placement new 和placement delete    在上次结束时,我期望道:当一个新产生的对象在没有完全构造时,它所占用的内存能自动释放。很幸运,C++标准委员会将这个功能加入到了语言中(而不幸的是,这个特性加得太晚了,许多编译器还不支持它)。Visual C++ 5和6都支持这个“自动删除”特性(但,如我们将要看到的,Vis

2002-03-01 08:54:00 1233

原创 C与C++中的异常处理2(part1)

1.     Microsoft对异常处理方法的扩展    前次,我概述了异常的分类和C标准库支持的处理方法。这次讨论Microsoft对这些方法的扩展:结构化异常处理(SEH)和Microsoft Foundation Class (MFC)异常处理。SEH对C和C++都有效,MFC异常体系只对C++有效。 1.1     机构化异常处理    机构化异常处理是Windows提供

2002-03-01 08:53:00 1963

原创 C与C++中的异常处理2(part2)

1.1     版本3:恢复异常    接下来,改: __except(except_filter(3, EXCEPTION_CONTINUE_SEARCH)) 为:__except(except_filter(3, EXCEPTION_CONTINUE_EXECUTION))     重新编译并运行。可以看到这样的输出:0:before first try1:

2002-03-01 08:53:00 1418

原创 C与C++中的异常处理3

1.     标准C++异常处理的基本语法和语义    这次,我来概述标准C++异常处理的基本语法和语义。顺便,我会将它和前两次提到的技术进行比较。(在本文及以后,我将标准C++异常处理简称为EH,将微软的方法称为SEH。)1.1     基本语法和语义    EH引入了3个新的C++语言关键字:l         catchl         throwl        

2002-03-01 08:53:00 1796

原创 C与C++中的异常处理4

1.     实例剖析EH    到现在为止,我仍然逗留在C和C++的范围内,但这次要稍微涉及一下汇编语言。目标:初步揭示Visual C++对EH的throw和catch的实现。本文不是巨细无遗的,毕竟我的原则是只关注(C/C++)语言本身。然而,简单的揭示EH的实现对理解和信任EH大有帮助。1.1     我们所害怕的唯一一件事    在throw过程中退栈时,EH追踪哪个局部对象

2002-03-01 08:53:00 1269

原创 C与C++中的异常处理5

1.     C++的new和delete操作时的异常处理    今天,我们开始学习C++的new和delete操作时的异常处理。首先,我将介绍标准C++运行库对new和delete操作的支持。然后,介绍伴随着这些支持的异常。1.1     New和Delete表达式    当写B *p = new D;这里,B和D是class类型,并且有构造和析构函数,编译器实际产生的代码大

2002-03-01 08:53:00 1236

原创 C与C++中的异常处理6

1.     Microsoft对于的实现版本中的异常处理上次,我讲述了标准运行库头文件中申明的12个全局函数中的异常行为。这次我将开始讨论Microsoft对这些函数的实现版本。    在Visual C++ 5中,标准运行库头文件提供了这些申明:namespace std   {   class bad_alloc;   struct nothrow_t;   ex

2002-03-01 08:53:00 1285

原创 C与C++中的异常处理7

1.     部分构造及placement delete讨论在一般情况下的部分构造、动态生成对象时的部分构造,以及用 placement delete来解决部分构造问题。     C++标准要求标准运行库头文件提供几个operator delete的重载形式。在这些重载形式中,Visual C++ 6缺少:l         void operator delete(void *,

2002-03-01 08:52:00 1110

原创 C与C++中的异常处理9

1.     placement new 和placement delete,及处理构造函数抛出的异常    当被调用了来清理部分构造时,operator delete的第一个void *参数带的是对象的地址(刚刚由对应的operator new返回的)。operator delete的所有额外placement参数都和传给operator new的相应参数的值相匹配。    在代码里,语

2002-03-01 08:52:00 1071

原创 C与C++中的异常处理10

1.     从私有子对象中产生的异常    几部分来,我一直展示了一些技巧来捕获从对象的构造函数中抛出的异常。这些技巧是在异常从构造函数中漏出来后处理它们。有时,调用者需要知道这些异常,但通常(如我所采用的例程中)异常是从调用者并不关心的私有子对象中爆发的。使得用户要关心“不可见”的对象表明了设计的脆弱。    在历史上,(可能抛异常)的构造函数的实现者没有简单而健壮的解决方法。看这个简

2002-03-01 08:51:00 1173

原创 C与C++中的异常处理11

1.     异常规格申明    现在是探索C++标准运行库和Visual C++在头文件中申明的异常支持的时候了。根据C++标准(subclause 18.6,“Exception handling” )上的描述,这个头文件申明了:l         从运行库中抛出的异常对象的基类。l         任何抛出的违背异常规格申明的对象的可能替代物。l         在违背异常规

2002-03-01 08:51:00 1752 1

原创 C与C++中的异常处理12

1.     unexpected()的实现上固有的限制    上次,我介绍了C++标准运行库函数unexpected(),并展示了Visual C++的实现版本中的限制。这次,我想展示所有unexpected()的实现上固有的限制,以及绕开它们的办法。 1.1     异常处理函数是全局的、通用的    我在上次简要地提过这点,再推广一点:过滤unexpected异常的异常处理函

2002-03-01 08:51:00 1073

原创 C与C++中的异常处理13

1.     异常安全    接下来两次,我将讨论“异常安全”,C++标准中使用了(在auto_ptr中)却没有定义的术语。在C++范围内,不同的作者使用这个术语却表达不同的含义。在我的专题中,我从两个方面来定义“异常安全”:l         如果一个实体捕获或抛出一个异常,但仍然维持它公开保证的语义,它就是“接口安全”的。依赖于它保证的力度,实体可能不允许将任何异常漏给其用户。l 

2002-03-01 08:51:00 1002

原创 C与C++中的异常处理14

1.     模板安全    上次,我开始讨论异常安全。这次,我将探究模板安全。    模板根据参数的类型进行实例化。因为通常事先不知道其具体类型,所以也无法确切知道将在哪儿产生异常。你大概最期望的就是去发现可能在哪儿抛异常。这样的行为很具挑战性。    看一下这个简单的模板类:template class wrapper   {public:   wrapper(

2002-03-01 08:51:00 1033

原创 C与C++中的异常处理15

1.     模板安全(续)    在异常安全的第二部分,我讲了在构造函数和析构函数中导致资源泄漏的问题。这次将探索另外两个问题。并且以推荐读物列表结束。1.1     Problem #2:get     上次,我定义X::get()为:T get()   {   return *value_;   }    这个定义有点小小的不足。既然get()不改变wrapp

2002-03-01 08:51:00 960

原创 C与C++中的异常处理16

1.     指导方针    根据读者们的建议,经过反思,我部分修正在Part14中申明的原则:l         只要可能,使用那些构造函数不抛异常的基类和成员子对象。l         不要从你的构造函数中抛出任何异常。    这次,我将思考读者的意见,C++先知们的智慧,以及我自己的新的认识和提高。然后将它们转化为指导方针来阐明和引申那些最初的原则。    (关键字说明:

2002-03-01 08:51:00 1432

原创 C与C++中的异常处理17

1.     C++异常和Visual C++ SEH的混合使用    我在Part2介绍了Structured Exception Handling(简称SEH)。在那时我就说过,SEH是window及其平台上的编译器专有的。它不是定义在ISO C++标准中的,使用它的程序将不能跨编译器移植。因为我注重于标准兼容和可移植性,所以我对将windows专有的SEH映射为ISO标准C++的exce

2002-03-01 08:51:00 1507

effective modern c++网友自译版.

effective modern c++ 中文

2017-02-06

编译宏控过滤和宏替换工具stedit1.2.5pro

为stedit1.2.5增加了比较强大的编译宏控过滤和宏替换功能。 2.tools-Manual 的auto deduce macro replace是智能推导模式,将根据用户指定的编译宏控、include路径,自动推导出当前文件所包含的所有的宏,经用户选择后,进行宏替换动作。 a)选中要进行宏替换的代码段 b)选择auto deduce macro replace 菜单 c)在新弹出的宏替换的主对话框里点击“设定宏” d)在新对话框里点“重新推导” e)会弹出对话框, 1.输入include目录,每行一个目录即可。 2.启用预置宏,如果是要分析boost的preprocess相关宏的替换过程,请勾选上所有内置宏 f)耐心等待后,会显示代码一共直接用了哪些宏等等。注意:至少确保左下“需要确定的宏”是空的,这是现在就知道已经用到,但是定义不唯一的,请对其进行适当的勾选。 g)点“确定”,退出此对话框 h)回到宏替换的主对话框,点“转换” i)如果过程中遇到没有确定的宏,会跳对话框,要求进行选择 j)请使用boost的低版本preprocess库:1.4x到1.5x

2013-02-20

统计函数平均长度和最大长度

C、C++单文件函数长度统计工具。 多文件时,用法:dir /s /b *.cpp *.h | 本程序名 列表显示的临界行数(默认20) 必须是能通过编译的代码。注释掉的部分不统计(包括#if 0注释风格) 函数长度统计正确性估计在99%,函数名显示的正确性估计在80~90%

2009-06-16

统计函数平均长度和最大长度

C、C++单文件函数长度统计工具。 多文件时,用法:dir /s /b *.cpp *.h | 本程序名 列表显示的临界行数(默认20) 必须是能通过编译的代码。注释掉的部分不统计(包括#if 0注释风格) 函数长度统计正确性估计在99%,函数名显示的正确性估计在80~90%

2009-06-16

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除