#include <iostream>
#include <cstring>
// 定义结构体C
struct C {
int value;
C(int v) : value(v) {}
};
// 定义结构体B
struct B {
C* ptrC;
B() : ptrC(nullptr) {}
~B() {
if (ptrC) delete ptrC;
}
};
// 定义结构体A
struct A {
B arrB[10];
A() {
for (int i = 0; i < 10; ++i) {
arrB[i].ptrC = new C(i);
}
}
~A() {
for (int i = 0; i < 10; ++i) {
if (arrB[i].ptrC) delete arrB[i].ptrC;
}
}
};
int main() {
A a;
// 使用结构体a
for (int i = 0; i < 10; ++i) {
std::cout << "a.arrB[" << i << "].ptrC->value: " << a.arrB[i].ptrC->value << std::endl;
}
return 0;
}
关键实现步骤解释
- 结构体C的定义:
- 结构体C包含一个简单的
int
类型成员value
,并提供一个构造函数用于初始化该成员。
- 结构体B的定义:
- 结构体B包含一个指向结构体C的指针
ptrC
。构造函数将ptrC
初始化为nullptr
,析构函数负责释放ptrC
指向的内存。
- 结构体A的定义:
- 结构体A包含一个结构体B的数组
arrB
。
- 在结构体A的构造函数中,通过循环为数组
arrB
的每个元素的ptrC
分配内存,并使用合适的值初始化结构体C。
- 结构体A的析构函数负责释放
arrB
数组中每个元素的ptrC
所指向的内存,以避免内存泄漏。
- 内存访问效率和性能优化:
- 通过在构造函数中直接初始化各层结构体成员,减少了不必要的内存分配和初始化开销。
- 对于数组的访问采用连续的循环方式,符合CPU缓存预取机制,提高内存访问效率。同时,在析构函数中按照构造的逆序释放内存,确保资源正确回收。