- 1、本文档共3页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
《Effective-C》条款04确定对象被使用前以先被初始化
《Effective C++》------条款04 确定对象被使用前已先被初始化---------------make sure that objects are initialized before they used.-------初始化int x = 0;int y;如果不同的编译遇到y时有的会初始化(为0),有时候不会。读取不明确的值会导致不明确的行为,因为读取y值可能为任何值,最终导致不可预知的程序行为,最后也很能调试定位到。类成员的初始化C++规定,对象的成员变量的初始化动作发生在进入构造函数本体之前。在构造函数内,都不是初始化,而是赋值。初始化发生的时间更早,发生于这些成员的default构造函数被自动调用之时(比进入函数本体之前更早)。初始化列表class PhoneNumber{};class ABEntry{public:ABEntry(const std::string name, const std::string address, std::listPhoneNumber phones);private:std::string theName;std::string theAddress;std::listPhoneNumber thePhones;int numTimesConsulted;};ABEntry::ABEntry(const std::string name, const std::string address, std::listPhoneNumber phones){theName = name;//这些都是赋值而不是初始化 会先调用拷贝构造然后在赋新值theAddress = address;thePhones = phones;numTimesConsulted = 0;}改写成ABEntry::ABEntry(const std::string name, const std::string address, std::listPhoneNumber phones):theName(name),//这才是真正的初始化 会带着值直接拷贝构造theAddress(address),thePhones(phones),numTimesConsulted(0){}该写后虽然最终效果都一样,但后者效率高。成员初始化顺序C++有着十分固定的“成员初始化次序”。先构造父类、再构造子类;成员变量以其声明顺序进行初始化;Static对象Static对象的生命周期从被构造出来,到程序结束为止。C++对不同的编译单元内的对象的初始化次序并无明确定义问题:假设有一个FileSystem class,它让互联网上的文件看起来像本机(local)。class FileSystem {public:}extern FileSystem tfs;如果在其它文件中调用tfs可能还未初始化,这导致程序崩溃。解决办法:单例模式 写到函数里FileSystem tfs(){static FileSystem fs;return fs;}这样使用对象的时候用函数调用,避免了使用前未初始化的现象。问题:如果你有一个系统,其中对象A必须在对象B之前先初始化,但A的初始化能否成功却又受制于b是否已初始化。这时候就有麻烦了?避免这种问题的解决办法:第一:手工初始化内置对象;第二:使用初始化成员列表;第三:定义好初始化顺序;牢记:为内置型对象进行手工初始化,因为c++不保证初始化它们。构造函数最好使用初始化成员列表,而不要在构造函数本体内使用赋值操作,初始化列表顺序应该和它们在类中的声明次序相同。为避免“跨编译单元的初始化次序”问题,请把对象写成static 封装成函数的方法去获取对象。
您可能关注的文档
- MIPS 指令系统和汇编语言.pdf
- Miseq标准化操作指南中文翻译版.pdf
- MMMMM 天基X射线掠入射式成像望远镜发展现状.pdf
- MQ错误代码表.docx
- MS5仓库贮存、养护、出入库管理制度.docx
- NOI2016笔试题库2016-07-05-09_48_11.pdf
- OC故障信号的来源和实质.doc
- Oracle 11g 环境下,利用utl_smtp创建发送邮件的存储过程.doc
- oracle备份控制文件.docx
- os2013-期末试卷A答案.pdf
- [中央]2023年中国电子学会招聘应届生笔试历年参考题库附带答案详解.docx
- [吉安]2023年江西吉安市青原区总工会招聘协理员笔试历年参考题库附带答案详解.docx
- [中央]中华预防医学会科普信息部工作人员招聘笔试历年参考题库附带答案详解.docx
- [保定]河北保定市第二医院招聘工作人员49人笔试历年参考题库附带答案详解.docx
- [南通]江苏南通市崇川区人民法院招聘专职人民调解员10人笔试历年参考题库附带答案详解.docx
- [厦门]2023年福建厦门市机关事务管理局非在编工作人员招聘笔试历年参考题库附带答案详解.docx
- [三明]2023年福建三明市尤溪县招聘小学幼儿园新任教师79人笔试历年参考题库附带答案详解.docx
- [哈尔滨]2023年黑龙江哈尔滨市木兰县调配事业单位工作人员笔试历年参考题库附带答案详解.docx
- [上海]2023年上海市气象局所属事业单位招聘笔试历年参考题库附带答案详解.docx
- [台州]2023年浙江台州椒江区招聘中小学教师40人笔试历年参考题库附带答案详解.docx
文档评论(0)