Effective C++ Item 16-成对使用new和delete时要采取相同形式
来源:互联网 发布:程序员需要学哪本书 编辑:程序博客网 时间:2024/05/22 10:35
成对使用new和delete时要采取相同形式
Use the same from in corresponding uses of new and delete
Ex:
std::string* stringArray = new std::string[100];...delete stringArray;
上面的程序使用delete删除stringArray对象数组,很可能只删除了一个对象,剩下的99个的析构函数很可能没被调用。
new和delete做了什么
当使用new动态生成对象时,有两件事发生:
- 分配内存(通过名为operator new函数)
- 针对此内存会有一个(或更多)构造函数被调用
当使用delete时,也有两件事发生:
- 针对此内存会有一个(或更多)析构函数被调用
- 释放内存(通过operator delete的函数)
如果要释放多个对象时,delete怎么知道即将被删除的内存之内究竟存有多少对象?这决定要使用多少次析构函数。换句话说,即将被删除的那个指针,所指的是单一对象还是对象数组。数组所用的内存通常还包括”数组大小”的记录,以便delete知道需要调用多少次析构函数。
new[]和delete[]
单一对象和对象数组的内存布局:
如果使用delete[]删除这个指针,delete[]会认为这个指针指向一个数组,会先取对象数组开头的数组大小n,然后调用n次析构函数
Ex:
std::string* stringPtr1 = new std::string; // 删除一个对象std::string* stringPtr2 = new std::string[100]; //删除一个由对象组成的数组
因为new/detele和new[]/delete[]的过程不一样,所以new/detele和new[]/delete[]必须成对使用。
参考资料
《Effective C++》
阅读全文
0 0
- Effective C++ Item 16 成对使用new和delete时要采取相同形式
- Effective C++ Item 16-成对使用new和delete时要采取相同形式
- 《Effective C++》学习笔记条款16 成对使用new和delete时要采取相同形式
- Effective C++(16) 成对使用new和delete时要采取相同的形式
- Effective C++:条款16:成对使用new和delete时要采取相同形式
- 读书笔记《Effective C++》条款16:成对使用new和delete时要采取相同形式
- C++之成对使用的new和delete时采取相同形式(16)---《Effective C++》
- Effective c++ 条款16学习笔记: 成对使用new和delete时要采取相同形式
- Effective C++ 学记之16 成对使用new和delete时要采取相同形式
- Effective C++ 读书笔记 条款16:成对使用new和delete时要采取相同形式
- Effective C++条款16解读:成对使用new和delete时要采取相同形式
- Effective C++条款16:成对使用new和delete时要采取相同形式
- Effective C++——》条款16:成对使用new和delete时要采取相同的形式
- 《Effect C++》学习------条款16:成对使用new和delete时要采取相同形式
- 成对使用new和delete时要采取相同形式
- Effective C++读书笔记之十六:成对使用new和delete时要采取相同形式
- effective c++成对使用new 和 delete时要采取相同形式
- 【C++】动态内存管理(一)成对使用new和delete时要采取相同形式
- python 中文iso8859-1编码转utf8编码
- POJ 1182 食物链 (并查集)(需复习!!)
- 【C#机房重构】无法将类型为“JF.DAL.BillDAL”的对象强制转换为类型“JF.IDAL.IBillIDAL”
- 关于卫星的结构分析
- 内存泄露
- Effective C++ Item 16-成对使用new和delete时要采取相同形式
- 数据库FMDB的使用
- Python的orm框架sqlalchemy的查询多条数据只显示第一条!!
- Linux非root用户安装Python及相关库
- 后台接收数据时中文乱码问题
- fragment重叠的完美解决方案
- VM安装Ubuntu 12.04与win7共享文件
- Codeforces Round #261 (Div. 2)
- jsp倒计时分秒