文章目录

一、动态空间申请

#include <iostream>
#include <string.h>
#include <stdlib.h>//需要用到malloc
using namespace std;

//定义一个盒子类
class Box
{
public:
Box() //定义构造函数
{
cout << "Box的无参构造" << endl;
}
~Box() //定义析构函数
{
cout << "Box的析构函数" << endl;
}
int a; //私有成员数据
};

//在C语言中动态申请空间
void test01()
{
//用malloc申请一段动态内存空间
Box *p= (Box*)malloc(sizeof(Box)); //空间大小为类Box的大小
free(p); //使用完了释放内存空间
}

//在C++语言中申请普通类型的动态空间:类型名 *p= new 类型名,p2是一个指针
void test02()
{
//申请一段int类型的空间并赋值给p2指针,大小为sizeof(int)
int *p2= new int;
*p2= 99;
cout << "*p2= " << *p2 << endl;
delete p2; //使用完了释放内存空间
}

//在C++语言中申请自定义类的动态空间,p3是一个对象指针
void test03()
{
//申请一段Box类型的空间并赋值给p3指针,大小为sizeof(Box)
Box *p3= new Box;
(*p3).a= 666;
cout << "p3对象中的a= " << (*p3).a << endl;
delete p3; //使用完了释放内存空间
}

//在C++语言中申请数组的动态空间,p4是一个数组
void test04()
{
int *p4= new int[10]; //申请一段int数组类型的空间,大小为sizeof(int[10]),实际上该指针指向的是数组元素的首地址
//给数组元素赋值
for(int i=0; i<10; i++)
{
p4[i]= i+10;
}
//输出数组元素的值
for(int i=0; i<10; i++)
{
cout << p4[i] << " ";
}
cout << endl;
//释放内存空间,不能直接delete p4; 这样只是释放了首元素的空间
delete []p4;
}

int main()
{
//test01();
//test02();
test03();
test04();
return 0;
}

C++动态空间申请、动态对象(new与delete运算)_数据结构

二、动态对象的使用

#include <iostream>
#include <string.h>
#include <stdlib.h>//需要用到malloc
using namespace std;

//定义一个盒子类
class Box
{
public:
Box() //定义构造函数
{
cout << "Box的无参构造" << endl;
}
//使用初始化列表定义有参构造函数
Box(int h, int w, int len):height(h), width(w), length(len)
{
cout << "Box的有参构造" << endl;
}
~Box() //定义析构函数
{
cout << "Box的析构函数" << endl;
}
private:
int height; //私有成员数据
int width;
int length;
};

//定义测试函数
void test()
{
//申请一段Box类型的动态空间并赋值给p指针,大小为sizeof(Box)
//并传入构造函数的参数
Box *p= new Box(1, 2, 3);
delete p; //释放申请的内存空间
//
//申请动态空间,调用无参构造的对象数组
cout << "-------------------------" << endl;
Box *p2= new Box[5];
delete []p2; //释放对象数组的内存空间
}

int main()
{
test();
}

C++动态空间申请、动态对象(new与delete运算)_内存管理_02