C++动态内存管理精要:栈与堆、new/delete、数组与对象分配实战
理解动态内存机制是成为优秀C++程序员的必修课。程序内存分两大区:
- 栈:函数内声明的变量自动分配/释放,生存期随作用域。
- 堆:未使用的内存池,运行期按需动态分配,程序员手动管理生命周期。
所需内存大小常在运行期才能确定,此时使用new运算符在堆上分配,返回分配地址;不再需要时用delete运算符释放。
new/delete基本用法
通用语法:new data-type; data-type可为内置类型、数组、类/结构体。示例分配double:
double* pvalue = NULL;
pvalue = new double; // 请求分配
分配可能失败(堆耗尽),良好实践检查返回值:
double* pvalue = NULL;
if(!(pvalue = new double)) {
cout << "Error: out of memory." << endl;
exit(1);
}
malloc()虽保留但不推荐:new不仅分配内存,还构造对象(调用构造函数),这是C++核心优势。
释放:delete pvalue;
完整演示:
#include <iostream>
using namespace std;
int main() {
double* pvalue = NULL;
pvalue = new double;
*pvalue = 29494.99;
cout << "Value of pvalue : " << *pvalue << endl;
delete pvalue;
return 0;
}
输出:Value of pvalue : 29495
数组动态分配
分配20字符数组:char* pvalue = new char[20];
释放必须用方括号:delete [] pvalue;
多维数组:double** pvalue = new double[3][4];(3行4列),释放仍delete [] pvalue;。
对象动态分配
对象与基本类型无异。演示Box对象数组:
#include <iostream>
using namespace std;
class Box {
public:
Box() { cout << "Constructor called!" << endl; }
~Box() { cout << "Destructor called!" << endl; }
};
int main() {
Box* myBoxArray = new Box[4];
delete [] myBoxArray;
return 0;
}
输出:构造函数调用4次,析构函数调用4次,证明new[]/delete[]正确管理对象生命周期。
C语言
- 深入理解 C++ 数据类型:基础类型、修饰符与最佳实践
- 掌握 C++ 运算符:六大类型全解析与实战示例
- C++ 注释最佳实践:编写可读、可维护代码的注释艺术
- C 语言动态内存管理:calloc、malloc 与 free 完全解析
- C++编程语言:核心特性全景解析
- C++常量与字面量完全手册:类型、语法与最佳实践
- C++运算符大全:算术/关系/逻辑/位/赋值/杂项与优先级结合性
- C++数值类型实战指南:基本类型、数学函数与随机数生成
- C++引用详解:核心概念、与指针三大差异及函数参数/返回值应用
- C++动态内存管理精要:栈与堆、new/delete、数组与对象分配实战
- C++模板编程指南:泛型编程基石与函数/类模板实战
- C++预处理器指令详解:#define宏、条件编译、#/#运算符与预定义宏