Effective C++ 解析 1
来源:互联网 发布:耳机音质测试软件 编辑:程序博客网 时间:2024/06/02 04:22
声明: 大四快毕业了,得面对社会得到offer(当然现在也有offer了 )!
来源: 本文主要参考书籍 Effective C++ 转载请标明出处(尊重原创,谢谢!)
条款三
1 尽量使用new 和 delete 而不使用malloc 和 free
Effective C++ 书籍上面也有相对应的小示例下面也主要是一个总结
原因 1:delete会调用对象的析构函数,和new对应free只会释放内存,new调用构造函数。malloc与free是C++/C语言的标准库函数,new/delete是C++的运算符。
原因 2:new/delete 和malloc/free 都可动态的申请内存,仅仅使用malloc/free 不能满足动态对象的要求,原因1 也说的比较明显,对象在创建的同时要自动执行构造函数,对象在消亡之前要自动执行析构函数。由于malloc/free是库函数而不是运算符(原因就在此),不能够把执行构造函数和析构函数的任务强加于malloc/free。而C++语言需要一个能完成动态内存分配和初始化工作的运算符new,以及一个能完成清理与释放内存工作的运算符delete。注意new/delete不是库函数。
2 new 和 delete 与 malloc 和 free 混在一起使用(严重不推荐)
原因 1:不可预见错误,new/delete 和malloc/free 不兼容性导致, 当然在C++中使用malloc 和 free 是不会出错的噢!
小结:如果面试你可以顺利的说出上面几点。offer 还怕么,答案是:NO
条款 5
1 对应的new 和 delete 采用相同的形式(delete与 delete []区别)
示例解析:
string stringArray = new string[100];/* 代码初始化区域*/delete stringArray ;
运行结果:不可预测错误(“当delete操作符用于数组时,它为每个数组元素调用析构函数,然后调用operatordelete来释放内存。”)
原因 1: stringArray 指向100 string个对象,99 个不会被正确销毁,调用new 首先内存被分配(operate new函数),将自行判断执行一个或多个 构造函数 ,执行delete 同样如此(operator delete来释放内存),对于delete 对象,取决于析构函数
原因 2:对于内建简单数据类型,delete和delete[]功能是相同的。对于自定义的复杂数据类型,delete和delete[]不能互用。你在用delete时没用括号,delete就会认为指向的是单个对象,否则,它就会认为指向的是一个数组。
2 typedef 可解决delete 问题
原因 1:new 创建typedef 应该使用什么形式的delete 来删除
示例解析:
typedef string AddressLine[5] //一个人的地址 5行,都是string //因为AddressLine 是个数组 使用newstring * aries = new AddressLine//OK 如果你下面这样做会怎么样呢?delete aries //errordelete [] aries //ok上面这样做也可避免错误发生!
原因 2:此书也说面 最好不对 数组对象使用typedef (因为C++ 标准库包含了string 和 vector 模板使用它们将会很少使用数组),我认为还是看自己习惯使用,当然也有此书的道理。
1 0
- Effective C++ 解析 1
- Effective C++(1-4)
- 再看Effective C++(1)
- <<Effective C++>>笔记1
- Effective C++(1)读书笔记
- 《effective c++》读书笔记1
- <Effective C++>读书笔记-1
- 《Effective C++》 Reading Note 1
- 读More Effective C++(1)
- C++1(Effective C++)
- Effective Objective-C chapter-1
- <<Effective C++>>读书笔记(1)
- 【C++】Digest of 《effective C++》--1
- Effective C# 摘录(1) - C#Language Elements
- 《Effective C++》学习笔记(1)
- 《effective c#》 1 2版 目录 对比
- 《Effective Objective-C 2.0》学习笔记1
- Effective Objective C------ 1不要忘本
- jp.ne.so_net.ga2.no_ji.jcom.JComException: createInstance() failed HRESULT=0x800401F3L
- Oracle索引详解
- 人民日报批“色情业有益无害”说:你家里人知道吗
- 禁止select控件选择
- php empty
- Effective C++ 解析 1
- 在linux中添加字体
- 基于用户登陆的struts2中action的分类详解
- 调试 之gdb thread命令 与 ltrace/strace
- 如何理解 iOS Delegate (委托)设计模式
- [Object-C语言随笔之一]Mac os 下搭建iOS开发环境
- linux(debian)安装USB无线网卡(tp-link TL-WN725N rtl8188eu )
- 内部排序算法之堆排序
- webservice的配置使用