




已阅读5页,还剩92页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Effective C阅读说明Effective C阅读说明1原则3:如果可能,请使用const4原则5:了解c安静地编写和调用的函数6原则6:如果不希望编译器使用自动生成的函数,则必须明确拒绝8原则7:多态基类的virtual析构函数声明11原则8:不要避免异常消亡函数15。原则9:在配置和消亡过程中,不要调用virtual函数16原则10: operator=reference to *this19返回原则11:在operator=中处理“自分配”19原则12:复制对象时,不要忘记每个组件21原则13:用对象管理资源22策略14:在资源管理类中注意COPYING行为24原则15:在资源管理类中提供对原始资源的访问25原则16:如果成对使用new和delete,则采用相同的形式27原则17:将newed对象作为独立语句放在智能指针28上原则18:界面易于正确使用,不容易误用29原则19:设计类与设计类型30相同原则20:相反,通过参考传递传递31原则21:当需要返回对象时,不要尝试返回相应的引用32策略22:将成员变量声明为private33原则23:用非friend(而不是member)替换member函数34策略24:如果所有参数都需要类型转换,请使用函数35,而不是member原则25:考虑写不抛出异常的swap函数37原则26:尽可能推迟变量定义的出现39原则27:尽可能少的类型转换动作40原则28:防止handles返回对象的内部组件43原则29:为“异常安全”而努力是值得的45原则30:彻底理解内线(内线)的内外48原则31:将文件之间的变动依赖性降至50原则32:确保你的公共继承形成了IS-A关系53第33条:防止继承的名称掩码54原则34:区分接口继承并实施继承55原则35:考虑虚拟函数以外的其他选择57原则36:不能重新定义继承的非虚拟函数60原则37:不重新定义继承的默认参数值62原则38: HAS-A关系复合形成或根据某事实现63原则39:明知继承PRIVATE 64,但谨慎使用原则40:明智谨慎地使用多重继承69。原则41:了解隐式接口和编译期多态性71原则42:理解typename的双重含义72原则43:学习模板基类的名称74处理策略44:从templates76中分离与参数无关的代码原则45:使用成员函数模板接受所有兼容类型78原则46:如果需要类型转换,请为模板定义非成员函数80原则47:使用traits classes表示类型信息82原则48:了解模板元编程85原则49:了解new-handler的行为87原则50:了解new和delete的合理更换时间90第51条:要编写new和delete,您必须忠实于一般92原则52: placement new也编写placement delete94原则54:不要忽略编译器的警告95熟悉标准库96,包括原则54: TR1原则55:让自己熟悉Boost97本来写在百度空间里,但不知为什么,百度博客的图片不见了,百度博客的不稳定性一目了然。所以我决定把我的理解和感觉写在我的云上。目录也做了,但最终所有的车辆都是PDF格式的。这个标准我会参考研究生时期论文的形式。原则3:如果可能,请使用constEffective C+的第三个原则是尽可能使用const。这是因为防止意外更改,不能更改的变量。本条款还提到const成员函数的重要性,因为只有const函数可用于操作const对象。Const对象如下图所示。Const函数有时会更改非const成员变量。使用mutable关键字。如果将成员变量修改为mutable,则可以在const函数中修改成员变量(如果成员变量不是const成员)。两个函数执行相同的功能,但类型不同时,两个段几乎相同,因此可能增加编译时间、维护和代码扩展等风险。在关于这个原则的叙述中,作者通过强制形式转换解决了,但在大多数情况下,作者本身并不主张实践。为了向用户提供单个接口,作者最好将不会在类中更改对象的成员函数显式声明为const函数,以便更容易地了解这些成员函数可以如何操作const对象。您可以在const成员函数中使用非const成员变量,但是遵守此原则可能对客户非常方便。Const成员函数不会变更物件,因此可以避免意外发生问题。Oracle建议使用成员函数(而不是const)调用const实现。也就是说,最好直接返回const成员函数,但必须对此return的表达式const成员函数执行强制类型转换,使其成为非const类型。因此,这里必须提到纯c的强迫型转换。关键是static_cast(value)最常用的纯c强制类型转换的关键字和用法。Const_cast(value)用于删除Const属性。但是,默认类型不可用。用于独立类型之间转换的reinterrpret _ cast (value)。Dynamic_cast(value)用于父/子类指针之间的转换。在c语言中,仅在此4中强制类型转换。原则5:了解c安静地编写和调用的函数该博客是Effective C+的第五个条款。但是现在我还不太明白那是什么意思,我想写博客,如果写的话就知道了。首先介绍null类,该类自动生成基本构造函数,复制构造函数,复制赋值运算符=和析构函数。他们都是public和inline。与以下类相同:上一篇文章中介绍了这些成员函数和运算符的用途。其中,默认构造函数负责调用父类和非static构造函数以及析构函数。上图显示,如果编译器自动生成的析构函数是非virtual,并且父类本身具有virtual的析构函数,则编译器不会自动生成非virtual析构函数。默认的copy构造函数和copy指定操作符只是目标对象的copy成员,而不是静态成员。但是,如果手动编写其中的某些内容,编译器将仅自动生成用户未写的项目。例如,如果只写了构造函数,则另一个编译器负责自动生成。上一篇补语中也提到了Copy构造函数和copy指定操作符的用法。Copy构造函数始终依次调用默认copy构造函数来分配值。例如,copy构造函数不能再指定值,因为如果要复制string类型的变量,它将调用string的copy构造函数。这个原则侧重于编译器不自动生成这些动态的情况。对于默认构造函数,如果手动编写构造函数,编译器不会再做太多努力。“Copy指定”操作符还具有自动生成条件。换句话说,copy指定操作符实际上很有意义,使用时可以正常工作。但是,编译器不会生成它,除非您自己编写它。在本书中,作者指出,如果两个示例之一是引用,另一个是const常量,指向两个都不能更改的对象,则如果不分配值,copy分配运算符可能会失败。例如,通常情况下,如果父类具有copy分配运算符,则在子类中,编译器不再提供自动生成copy分配运算符,而是直接使用父类比较好。这是因为编译器认为子类的copy分配运算符可以处理父类的分配操作。因此,如果将父类的copy分配运算符设置为private,则不能使用copy分配运算符,除非在子类中直接写入。原则6:如果不想使用编译器自动生成的函数,则必须明确拒绝这是Effective C+的第六个原则。在某些情况下,如果不希望复制特定类的对象,则无需编写copy构造函数和copy分配运算符编译器即可生成它们,因此必须自己写两者。您不希望别人调用它,因此必须将其声明为private类型。写入之后,编译器不会自动调用父类的copy构造函数和copy赋值运算符。即使可以调用这些内部成员和成员函数,如何做也很好?方法是只声明和实现这些函数,否则没有功能。但是,由于实际上并未使用,因此也可以省略几何参数,只需在几何参数列表中创建形状类型,如以下类型的定义所示:其中一些函数的实现如下:上图显示了copy构造函数和copy指定操作符都没有实现。在主程序中调用,如下所示:运行结果如下:出现错误消息,指出Copy构造函数无法解析。现在,将注释copy构造函数和copy指定操作符。正在运行,如下所示:这个想法是,要阻止编译器自动生成函数,必须亲自动手写。原则7:多态基类的虚拟析构函数声明这是Effective C+的第7条原则,该原则要求在多态父类中使用virtual析构函数。首先,要知道多态性是什么。我会说坦率而没有深度的话。多态的一种方法是,在父类的指针指向其他子类的同时,实现多种功能以重复使用接口。在这种情况下,用作多态的父类通常具有一个或多个要在子类中实现的virtual member函数。好了,包装完毕。那么,为什么要有虚拟灭亡者呢?这是因为如果没有这些虚拟析构函数,子类的析构函数就不会调用,对象的子类部分也不会消亡,从而可能发生资源泄漏。现在,让我们看以下示例:如果Derived继承base,并且base没有virtual析构函数,则调用过程如下:运行结果如下:如果查看此结果,您会发现父类的析构函数正在运行。也就是说,对象的超类部分占用的资源已释放,但子类的析构函数不释放此描述对象的子类部分占用的资源。但是,如果在父类中添加一个虚拟析构函数,则不相同。作为同一调用进程,运行结果如下:这表示对象子类部分占用的资源也已释放。通常,作为要继承的父类的类在子类中有一个或多个virtual成员函数。如果某个类没有virtual成员函数,通常情况下,该类不作为父类存在,在这种情况下,不应将析构函数设置为virtual。怎么了?与c的虚拟自实施机制相关。这些对象必须有一个名为vtbl的表,因此不需要导入很多这样的表,但需要添加一个以占用空间,这就是不拉屎的性能。因此,不准备继承的类不需要设置virtual析构函数。本示例说明了如果要在virtual类中将析构函数设置为virtual,必须将析构函数设置为纯virtual函数并提供空实现的情况,如下图所示。你为什么要这样做?析构函数调用顺序是在没有子类的子类中,析构函数按层次调用父类的析构函数,因此,如果此纯virtual函数未实现,编译器将报告错误。简而言之,virtual析构函数只需要使用多态的超类,其他类是绘制蛇。继承机制中的类对象还包含您可以包含的最低层次以及更高层次的所有组件。原则8:不要逃避理想消灭者这是Effective C+的第八条原则。也就是说,不能消灭程序中出现的例外。也就是说,析构者要负责拦截例外。如果超过异常消失者转移到其他地方,程序可能会提前终止或出现未知的危险,后果很严重。应对这种情况有两种简单的方法。1、在析构器内发现异常,立即捕获,结束整个程序。2、在消亡函数中发现异常后立即捕获并勒死,遮挡别人的视线,继续执行程序。其中,为什么第一种手段比第二种手段好?方法1直接退出了程序,因此结果没有像预想的那样造成很大的损失。方法2你结束了这个异常,但程序的其他部分与这个功能有关,必然会产生影响,也许引发其他异常连锁反应,那是困难的。但是,这两种方法都不能正面处理发生的理想,因此也不能主张任何方法。本书提供的解决方案是再创建一个处理原始类中异常的类。此类具有处理原始类中异常的成员函数。此成员函数通过调用原始类中的异常处理来完成。实际上,第一级(原始类)伪装成处理异常。然后,异常处理类的析构器也有处理异常的代码。这部分是异常处理类本身的第二级。这是双重保险。如果在第二层还不能有效地处理异常,就只能强行退出程序。再概括一下这个原理,无论如何都不能超过理想析构函数的关口。原则9:在配置和消亡过程中,不要调用virtual函数这
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- GB/T 2999-2025耐火材料颗粒体积密度试验方法
- 2025年安全员安全生产操作题库及模拟题
- 2025年英语教师职业等级认证初级考试模拟题与答案详解
- 校园消防安全专题片(3篇)
- 2025年网络安全工程师面试模拟题及面试技巧
- 2025年小学教师安全知识测试题含考核答案
- 2025年安全生产安全管理知识安全趋势题及答案
- 2025届东营市利津县中考冲刺卷数学试题含解析
- 2025年后期制作岗位面试常见问题及答案
- 2025年安全管理竞聘面试常见问题答案
- 危险废物处置服务协议
- 《观光农业概论》课件
- 派出所签订治安调解协议书范文
- 情境领导力培训课件
- DBJ41T 277-2023 装配式钢结构集成楼盖应用技术规程 河南省工程建设标准(住建厅版)
- 飞灰螯合物运输服务方案
- 中建三局社招在线测评题
- 研究生学术表达能力培养智慧树知到答案2024年西安建筑科技大学、清华大学、同济大学、山东大学、河北工程大学、《环境工程》英文版和《环境工程》编辑部
- 玉米种植风险评估与管理
- 2024-2030年中国自动涂胶机行业市场发展趋势与前景展望战略分析报告
- DL∕T 2582.1-2022 水电站公用辅助设备运行规程 第1部分:油系统
评论
0/150
提交评论