一、new,delete
C++ 程序中的内存分为两个部分:
栈:在函数内部声明的所有变量都将占用栈内存。
堆:这是程序中未使用的内存,在程序运行时可用于动态分配内存。
#include"pch.h"
#include<iostream>
using namespace std;
int main()
{
double *pvalue = NULL;//初始化为null的指针
pvalue = new double;//为变量请求内存
*pvalue = 999.99;//在分配的地址存储值
cout << "value of value : " << *pvalue << endl;
delete pvalue;//释放
return 0;
}
二、数组的动态分配
二位数组
#include"pch.h"
#include<iostream>
using namespace std;
int main()
{
//二位数组实例测试
int **p;
int i, j;//p[4][8]
//开始分配4行8列的数据
p = new int *[4];
cout << p << endl;
for (i = 0; i < 4;i++) {
p[i] = new int[8];
cout << p[i] << endl;
}
for (i = 0; i < 4;i++) {
for (j = 0; j < 8;j++) {
p[i][j] = j * i;
}
}
//打印数据
for (i = 0; i < 4;i++) {
for (j = 0; j < 8;j++) {
if (j == 0)
cout << endl;
cout << p[i][j] << "\t";
}
}
//开始释放申请的堆
for (i = 0; i < 4;i++) {
delete[] p[i];
cout << p[i] << endl;
}
delete [] p;
return 0;
}
三维数组
#include"pch.h"
#include <iostream>
using namespace std;
int main()
{
int ***p;//p[2][3][4]
int i, j, k;
p = new int **[2];
for (i = 0; i < 2;i++) {
p[i] = new int *[3];
for (j = 0; j < 3;j++) {
p[i][j] = new int[4];
}
}
//输出三维数据
for (i = 0; i < 2;i++) {
for (j = 0; j < 3;j++) {
for (k = 0; k < 4;k++) {
p[i][j][k] = i + j+k;
cout << p[i][j][k] << " ";
}
cout << endl;
}
cout << endl;
}
//释放内存
for (i = 0; i < 2;i++) {
for (j = 0; j < 3;j++) {
delete[] p[i][j];
}
}
for (i = 0; i < 2;i++) {
delete[] p[i];
}
delete[] p;
return 0;
}
三、对象动态分配
#include"pch.h"
#include<iostream>
using namespace std;
class Box {
public:
Box() {
cout << "调用构造函数!" << endl;
}
~Box(){
cout << "调用析构函数!!!!" << endl;
}
};
int main()
{
Box * myBox = new Box[4];
delete[] myBox;
return 0;
}