C++之申请释放内存(对象数组和99乘法表)
Posted 你是小KS
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++之申请释放内存(对象数组和99乘法表)相关的知识,希望对你有一定的参考价值。
1.声明
当前内容主要为测试和使用C++中的内存申请和释放的基本操作,主要为new和delete操作
主要为
- 创建对象数组
- 创建二维数组的99乘法表
- 释放对应的内存
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乘法表)的主要内容,如果未能解决你的问题,请参考以下文章