C++之申请释放内存(对象数组和99乘法表)

1.声明

当前内容主要为测试和使用C++中的内存申请和释放的基本操作,主要为new和delete操作

主要为

  1. 创建对象数组
  2. 创建二维数组的99乘法表
  3. 释放对应的内存

2.99乘法表的demo

//	创建和使用当前的二维数组的基本操作
// 输出9*9乘法表
void print_two_array() {
	int rows = 9;
	/*int cols = 9;*/
	//	初始化一个9*9的乘法表的二维数组
	int **arrays = new int*[rows]; // 注意new 类型,可以是指针也可以是类
	if (arrays == NULL) {
		cout << "arrays无法申请内存" << endl;
		exit(0);
	}

	for (int i = 0; i < rows; i++) {
		arrays[i] = new int[i + 1]; //	开始初始化每一行数组
		if (arrays[i] == NULL) {
			cout << "arrays[" << i << "]无法申请内存" << endl;
			exit(0);
		}
	}
	//	开始打印9*9乘法表
	for (int i = 0; i < rows; i++) {
		for (int j = 0; j < i + 1; j++) {
			arrays[i][j] = (i + 1) * (j + 1);
			cout << (i + 1) << "*" << (j + 1) << "=" << arrays[i][j] << "\t";
		}
		cout << endl;
	}
	//	开始释放内存
	for (int i = 0; i < rows; i++) {
		delete[] arrays[i];
	}
	//	最后释放掉当前的指针
	delete[] arrays;
}

测试结果
在这里插入图片描述

3.对象数组的demo

class M_User {
private:
	int id;
	string username;
	string password;
public:
	M_User();
	M_User(int id, string username, string password);
	~M_User();
	int getId() const {
		return id;
	}

	void setId(int id) {
		this->id = id;
	}

	const string& getPassword() const {
		return password;
	}

	void setPassword(const string& password) {
		this->password = password;
	}
	void toString(void);

	const string& getUsername() const {
		return username;
	}

	void setUsername(const string& username) {
		this->username = username;
	}
};
//	这里必须一个无参的构造器,好像在M_User* users = new M_User[max];的时候就会调用
M_User::M_User() {
	cout << this << ":被创建了!" << endl;
}
M_User::M_User(int id, string username, string password) {
	/*cout << this << ":被创建了!" << endl;*/
	this->id = id;
	this->username = username;
	this->password = password;
}
M_User::~M_User() {
	cout << this << ":被销毁了!" << endl;
}
void M_User::toString(void) {
	cout << "M_User [ id=" << this->id << ",username=" << this->username
			<< ",password=" << this->password << " ]" << endl;
}

//	创建和使用当前的对象数组的基本操作
void create_and_print_muser_array() {
	int max = 5;
	M_User* users = new M_User[max];
	string names[] = { "张三", "李四", "王五", "赵六", "老七" };
	string defaultPwd = "123456";
	cout << "初始化所有的集合中的数据操作" << endl;
	for (int i = 0; i < max; i++) {
		users[i] = M_User((i + 1), names[i], defaultPwd);
	}

	cout << "输出所有的集合中的数据操作" << endl;
	//	输出当前M_User这个数组中的所有数据操作
	for (int i = 0; i < max; i++) {
		users[i].toString();
	}

	delete[] users;
	cout << "销毁数组数据完成!" << endl;
}

测试结果
在这里插入图片描述

4.出现的问题

1.当前的M_User必须有无参的构造函数,原因好像当前的new M_User[5]的时候回自动调用无参构造函数,进行初始化操作!

2.使用数组方式赋值的时候需要使用M_User();// 有参数的构造函数进行赋值操作,这个地方感觉有点不一样

3.释放的时候需要直接释放delete []对象!

5.总结

1.C++中需要手动的释放内存,但是是使用delete方式进行操作,只要是数组就需要使用delete []方式释放

2.感觉创建比释放更加简单,对象需要使用构造函数方式直接创建赋值!

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值