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

Posted 你是小KS

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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.感觉创建比释放更加简单,对象需要使用构造函数方式直接创建赋值!

以上是关于C++之申请释放内存(对象数组和99乘法表)的主要内容,如果未能解决你的问题,请参考以下文章

C++函数中,两个自动释放内存的动态内存申请类

程序员面试之——C++

指针和动态内存分配和释放

zList一个块状链表算法可以申请和释放同种对象指针,对于大数据量比直接new少需要差不多一半内存

如何在C++中使用动态三维数组

C++二维数组内存分配