C++内存管理之结构体内存释放
C++中使用new和delete申请和释放内存空间,二者是成对出现的,缺一不可。使用new开辟的内存空间位于堆中,只能通过delete释放,这与局部变量不同,局部变量存储在栈中,变量生存周期结束后其内存也随之释放。
结构体中成员变量中存在指针的,其内存释放遵循从里向外的原则,即先释放成员变量的内存,然后在释放结构体指针。由于C++中允许结构体中使用构造函数和析构函数,构造函数对成员数据进行初始化,析构函数对内存进行清理。析构函数在对结构体进行释放时调用,首先释放析构函数中的成员变量内存,然后释放结构体指针内存。
struct _STU_FamilyInfo { int nAge; }; struct _STU_StudentINFO { char* pstrName; int nAge; int nFamilyMember; _STU_FamilyINFO* pstuInfo; LPVOID lpExtInfo; _STU_StudentINFO() { pstrName = NULL; nAge = 0; nFamilyMember = 0; lpExtInfo = NULL; pstuInfo = NULL; }; ~_STU_StudentINFO() { if(pstrName) { delete []pstrName; pstrName = NULL; } if(pstuInfo) { delete []pstuInfo; pstuInfo = NULL; } }; }; _STU_StudentINFO* pstuStudent = new _STU_StudentINFO; pstuStudent->pstrName = "Sunny"; pstuStudent->nAge = 27; pstuStudent->nFamilyMember = 2; _STU_FamilyInfo* pstuFamilyMember = new _STU_FamilyInfo[2]; //...... 成员变量赋值 pstuStudent->lpExtInfo = new char[256]; memccpy(pstuStudent->lpExtInfo,"无其他说明",256) // 内存释放 if( pstuStudent->lpExtInfo ) { delete []pstuStuden->lpExtInfo; pstuStudent->lpExtInfo = NULL; } if(pstuStudent) { delete pstuStudent; pstuStudent = NULL; }
成员函数的其他内存在调用结构体指针的释放函数时,自动调用析构函数进行内存释放,也就是其生命周期结束。
声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。