c++ 自定义结构体中 有char数组 如何在构造函数中分配内存空间 在析构函数中释放内存空间呢
时间: 2024-03-12 14:50:24 浏览: 98
如果自定义结构体中包含 char 数组,我们可以通过在构造函数中分配内存空间,然后在析构函数中释放内存空间的方式来管理这些数组。下面是一个示例代码,展示了如何在构造函数和析构函数中分配和释放 char 数组的内存空间:
```c++
// 定义一个自定义结构体
struct Person {
std::string name;
int age;
char* address;
// 构造函数
Person(std::string n, int a, const char* ad) : name(n), age(a) {
// 计算地址字符串的长度
int len = strlen(ad);
// 分配内存空间
address = new char[len + 1];
// 复制字符串到内存空间中
strcpy(address, ad);
}
// 拷贝构造函数
Person(const Person& p) : name(p.name), age(p.age) {
// 计算地址字符串的长度
int len = strlen(p.address);
// 分配内存空间
address = new char[len + 1];
// 复制字符串到内存空间中
strcpy(address, p.address);
}
// 析构函数
~Person() {
// 释放内存空间
delete[] address;
}
};
```
在上面的代码中,我们定义了一个名为Person的结构体,其中包含三个成员变量:name、age和address。address 是一个指向 char 数组的指针,它存储了一个地址字符串。接下来我们分别介绍如何在构造函数和析构函数中分配和释放 char 数组的内存空间:
1. 构造函数
在构造函数中,我们首先计算出地址字符串的长度,然后使用 new 运算符分配内存空间。在分配内存空间之后,我们使用 strcpy 函数将地址字符串复制到内存空间中。这样就完成了内存空间的分配和数据的复制。
2. 拷贝构造函数
在拷贝构造函数中,我们首先计算出要复制的地址字符串的长度,然后使用 new 运算符分配内存空间。在分配内存空间之后,我们使用 strcpy 函数将地址字符串复制到内存空间中。这样就完成了内存空间的分配和数据的复制。
3. 析构函数
在析构函数中,我们使用 delete 运算符释放内存空间。由于 address 是一个 char 数组的指针,所以我们需要使用 delete[] 运算符来释放内存空间。这样就完成了内存空间的释放。
阅读全文