C++面向对象基础--动态内存(new的用法)
2021-04-13 12:28
标签:mamicode lazy mes 通用 存储 width include null img C++ 程序中的内存分为两个部分: 栈:在函数内部声明的所有变量都将占用栈内存。 堆:这是程序中未使用的内存,在程序运行时可用于动态分配内存。 在 C++ 中,我们可以使用new运算符为给定类型的变量在运行时分配堆内的内存,这会返回所分配的空间地址。如果不再需要动态分配的内存空间,可以使用 delete 运算符,删除之前由 new 运算符分配的内存。 1.new和delete的常规简要用法 new 运算符来为任意的数据类型动态分配内存的通用语法: 其中,data-type可以是包括数组在内的任意内置的数据类型,也可以是包括类或结构在内的用户自定义的任何数据类型。例如我们可以定义一个指向int类型数据的指针p,然后请求内存,该内存在执行时被分配。 如果自由存储区已被用完,可能无法成功分配内存。所以建议检查 new 运算符是否返回 NULL 指针,并采取以下适当的操作: 如果某个已经动态分配内存的变量不再需要使用时,我们可以使用 delete 操作符释放它所占用的内存,如下所示: new和delete完整用法示例: 运行结果: (1)一维数组: (2)二维数组: 二维数组实例测试: 代码运行结果: (3)三维数组: 三维数组测试实例: 代码运行结果:
3.对象的动态内存分配 示例代码: 代码运行结果: 如果要为一个包含四个test对象的数组分配内存,构造函数将被调用 4 次,同样地,当删除这些对象时,析构函数也将被调用相同的次数(4次)。 C++面向对象基础--动态内存(new的用法) 标签:mamicode lazy mes 通用 存储 width include null img 原文地址:https://www.cnblogs.com/guanrongda-KaguraSakura/p/13339942.html1 new data-type;
1 int* p = NULL; // 初始化为null的指针
2 p = new int; // 为变量请求内存
1 int* p = NULL;
2 if (!(p = new int))
3 {
4 cout "Error: out of memory." endl;
5 exit(1);
6
7 }
8 p = new int;
1 delete p; // 释放p所指向的内存
1 #include
1 Value of p : 12345
2.数组的动态内存分配
1 // 动态分配,数组长度为 n
2 int *array=new int [n];
3
4 //释放内存
5 delete [] array;
1 int **array
2 // 假定数组第一维长度为 m, 第二维长度为 n
3 // 动态分配空间
4 array = new int *[m];
5 for( int i=0; i
1 #include
1 int*** array;
2 // 假定数组第一维为 m, 第二维为 n, 第三维为h
3 // 动态分配空间
4 array = new int** [m];
5 for (int i = 0; i )
6 {
7 array[i] = new int* [n];
8 for (int j = 0; j )
9 {
10 array[i][j] = new int[h];
11 }
12 }
13 //释放
14 for (int i = 0; i )
15 {
16 for (int j = 0; j )
17 {
18 delete[] array[i][j];
19 }
20 delete[] array[i];
21 }
22 delete[] array;
1 #include
1 #include