C++动态空间申请、动态对象(new与delete运算)

一、动态空间申请

#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;
}

1-1

二、动态对象的使用

#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();
}

2-1

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

鸿蒙Next

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值