摘要: 对于非数组类型为可选项,对于数组类型则不含此项,应换为当作下标上界的表达式。 格式举例: (1) new int; (2) new int(5); (3) new char[10]; (4) new int[n]; (5) new double[m+1][N+1]; (6) new char*(&x); 执行第1条运算时将分配到具有4个字节的整数存储空间,并返回该存储空间的地址,即指向该存储空间的指针,该指针的类型为int*。 执行第2条运算时同样分配到具有4个字节的整数存储空间,返回该存储空间的地址,并且对该存储空间进行初始化,使之存储一个整数5。 执行第3条运算时,... 阅读全文
posted @ 2012-09-13 15:42 大猫814 阅读(169) 评论(0) 推荐(0) 编辑
摘要: 我的理解:对于一个数组,delete和delete[]都可以释放内存空间,但是只有delete[]才会调用每一个数组元素的析构函数,而delete只能调用第一个数组元素的析构函数。对于基本数据类型,没有析构函数,所以使用delete和delete[]没有区别。C++告诉我们在回收用new分配的单个对象的内存空间的时候用delete,回收用new[]分配的一组对象的内存空间的时候用delete[]。关于new[]和delete[],其中又分为两种情况:(1)为基本数据类型分配和回收空间;(2)为自定义类型分配和回收空间。对于(1), delete[]和delete是等同的。但是对于(2),情况就 阅读全文
posted @ 2012-09-13 15:14 大猫814 阅读(168) 评论(0) 推荐(0) 编辑
摘要: malloc与free是C++/C语言的标准库函数,new/delete是C++的运算符。它们都可用于申请动态内存和释放内存。对于非内部数据类型的对象而言,光用maloc/free无法满足动态对象的要求。对象在创建的同时要自动执行构造函数,对象在消亡之前要自动执行析构函数。由于malloc/free是库函数而不是运算符,不在编译器控制权限之内,不能够把执行构造函数和析构函数的任务强加于malloc/free。因此C++语言需要一个能完成动态内存分配和初始化工作的运算符new,以及一个能完成清理与释放内存工作的运算符delete。注意new/delete不是库函数。我们先看一看malloc/fr 阅读全文
posted @ 2012-09-13 14:54 大猫814 阅读(128) 评论(0) 推荐(0) 编辑