亿迅智能制造网
工业4.0先进制造技术信息网站!
首页 | 制造技术 | 制造设备 | 工业物联网 | 工业材料 | 设备保养维修 | 工业编程 |
home  MfgRobots >> 亿迅智能制造网 >  >> Industrial programming >> C语言

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语言

  1. 深入理解 C++ 数据类型:基础类型、修饰符与最佳实践
  2. 掌握 C++ 运算符:六大类型全解析与实战示例
  3. C++ 注释最佳实践:编写可读、可维护代码的注释艺术
  4. C 语言动态内存管理:calloc、malloc 与 free 完全解析
  5. C++编程语言:核心特性全景解析
  6. C++常量与字面量完全手册:类型、语法与最佳实践
  7. C++运算符大全:算术/关系/逻辑/位/赋值/杂项与优先级结合性
  8. C++数值类型实战指南:基本类型、数学函数与随机数生成
  9. C++引用详解:核心概念、与指针三大差异及函数参数/返回值应用
  10. C++动态内存管理精要:栈与堆、new/delete、数组与对象分配实战
  11. C++模板编程指南:泛型编程基石与函数/类模板实战
  12. C++预处理器指令详解:#define宏、条件编译、#/#运算符与预定义宏