Effective C++ 笔记(二)

本文探讨了C++编程中的一些关键实践,包括避免转型操作的副作用,减少dynamic_cast的使用,封装转型过程,避免返回指向对象内部的句柄,确保异常安全性,理解inline函数的工作原理,降低文件间编译依赖,使用Object References和Pointers,明智地使用private和多重继承,以及理解和处理模板、new和delete操作的细节。通过遵循这些指导原则,可以提高C++代码的质量和可维护性。
摘要由CSDN通过智能技术生成
E27 尽量少做转型动作

转型动作会产生副本。2)真正调用了A类的fun函数,而1)却调用了转型产生的临时对象的函数,如果涉及到修改对象的数据,真正被修改数据的是临时对象,而不是this

1) static_cast<A>(*this).fun();

     2) A::fun();

尽量避免dynamic_cast操作,尝试寻找其他替代方案。

如果转型是必要的,那就将其封装在一个函数当中,客户不需要负责转型,只需要调用该函数。

E28 避免返回handles指向对象内部成分

增强封装性,帮助const成员函数行为像个const,降低“虚吊号码”的可能性。

E29 为“异常安全”而努力是值得的

使用智能指针维护资源,使用copy and swap实现“强烈保证”

E30 透彻了解inlining函数的里里外外

inline用于模板函数要格外小心,需要模板的所有具现化都能够inline

virtual函数不能够被inline,在vs中,编译器将会忽略inline的申请。

如果以指针等方式来调用inline函数,编译器将不会用函数本体来替换语句。

对构造函数和析构函数进行inline必须考虑清楚,因为编译器还会做很多别的事情使他们变得巨大,例如构造函数内部调用基类的构造函数等等。

由于模块调用inline函数时,编译进去的可能是函数的本体,所以一旦inline函数被改动过,调用方也要重新编译。如果不是inline函数,只要重新链接就行了,如果inline函数是被动态加载的,根本就不用链接。

许多编译器选择在调试版本中拒绝inline,以便设置断点进行调试。

评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值