条款5:对应的new和delete要采用相同的形式 (第二章 内存管理)
来源:互联网 发布:ubuntu查看系统分区 编辑:程序博客网 时间:2024/06/07 11:46
C++中涉及到的内存的管理问题可以归结为两方面:正确地得到它和有效地使用它。
{
string *stringarray = new string[100];
delete stringarray;
}
#include <string.h>
using namespace std;
typedef string addresslines[4];
int main()
{
string *pa1 = new addresslines;
pa1[0] = "first";
pa1[1] = "second";
pa1[2] = "third";
pa1[3] = "four";
delete pa1; //错误
}
然而,C++其实从C继承了一个很严重的头疼病,那就是内存泄漏隐患。在C中,只要用malloc分配的内存没有用free返回,就会产生内存泄漏。在C++中,肇事者的名字换成了new和delete,但情况基本上是一样的。
当然,因为有了析构函数的出现,情况稍微有改善,因为析构函数为所有将被摧毁的对象提供一个方便的调用delete的场所。但是这同时又带来了更多的烦恼,因为new和delete是隐式地调用构造函数和析构函数的。这会增加出错的机会。
{
string *stringarray = new string[100];
delete stringarray;
}
这样的程序看起来好像一切都井然有序,一个new对应着一个delete---然而却隐藏着很大的错误:程序的运行情况将是不可预测的。上面的程序在编译器g++下就出现下面的运行错误:Segmentation fault
用new的时候会发生两件事:1.内存被分配,2.为被分配的内存调用一个或多个构造函数。
用delete的时候,也有两件事发生:1.为将被释放的内存调用一个或多个析构函数,2.释放内存。
#include <iostream>
#include <string.h>
using namespace std;
typedef string addresslines[4];
int main()
{
string *pa1 = new addresslines;
pa1[0] = "first";
pa1[1] = "second";
pa1[2] = "third";
pa1[3] = "four";
delete pa1; //错误
}
代码中的delete pa1;是错误的,必须使用delete[] pa1;
- 条款5:对应的new和delete要采用相同的形式 (第二章 内存管理)
- 条款5:对应的new和delete要采用相同的形式 [内存管理]
- Effective C++条款5:对应的new和delete要采用相同的形式
- 条款5:对应的new和delete要采用相同的形式
- effective C++笔记之条款5:对应的new和delete要采用相同的形式
- Effective C++:条款5:对应的new和delete要采用相同的形式
- 对应的new和delete要采用相同的形式
- 条款16 成对使用new和delete时要采用相同的形式
- Effective C++学习笔记:对应的new和delete要采用相同的形式
- 条款5:使用相同的形式的new和delete
- 条款16:成对适用new和delete时要采用相同形式
- 条款16:成对使用new和delete时要采取相同的形式
- 条款16:成对使用new和delete时要采取相同的形式
- 条款16:成对使用new和delete的时候要采取相同形式
- 【C++】动态内存管理(一)成对使用new和delete时要采取相同形式
- effective c++ 条款13,16(以对象管理资源,成对使用new delete的形式相同)
- Effective C++——》条款16:成对使用new和delete时要采取相同的形式
- 条款16:成对使用new和delete时要采取相同形式
- 条款3:尽量用new和delete而不用malloc和free
- 搞了一个独立博客,请各位光临pingworld.cn
- 用span实现空格的精确设定 空格
- POJ 1724 ROADS
- 条款4:尽量使用C++风格的注释
- 条款5:对应的new和delete要采用相同的形式 (第二章 内存管理)
- NVelocity标签使用详解
- linux find命令
- 条款6:析构函数里对指针成员调用delete
- PHP读取MySQL数据代码
- POJ——3903(最长非降子序列的另一解法)
- udev规则
- 条款7:预先准备好内存不够的情况
- 条款8:写operator new和operator delete时要遵循常规