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;
 
    //Construction
    _STU_StudentINFO()
    {
        pstrName = NULL;
        nAge = 0;
        nFamilyMember = 0;
        lpExtInfo = NULL;
        pstuInfo = NULL;
    };

    //Destruction
    ~_STU_StudentINFO()
    {
        if(pstrName)
        {
            delete []pstrName;
            pstrName = NULL;
        }
 
        if(pstuInfo)
        {
            delete []pstuInfo;
            pstuInfo = NULL;
        }
    };
};
 
//Initialization & assignment
_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)
 
 
//Release the memory
if( pstuStudent->lpExtInfo )
{
    delete []pstuStuden->lpExtInfo;
    pstuStudent->lpExtInfo = NULL;
}
 
if(pstuStudent)
{
    delete pstuStudent;
    pstuStudent = NULL;
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1.C和C++的区别?C++的特性?面向对象编程的好处? 答:c++在c的基础上增添类,C是一个结构化语言,它的重...
    杰伦哎呦哎呦阅读 13,259评论 0 45
  • 1.面向对象的程序设计思想是什么? 答:把数据结构和对数据结构进行操作的方法封装形成一个个的对象。 2.什么是类?...
    少帅yangjie阅读 10,437评论 0 14
  • 一、C语言基础 1、struct 的内存对齐和填充问题其实只要记住一个概念和三个原则就可以了: 一个概念:自然对齐...
    XDgbh阅读 6,602评论 1 38
  • 前几天,我第一次参加了一个线下活动,感受很深! 昨天,我第一次以简书的形式把自己所学所想表达了出来,同时以分享好东...
    小雪_8e77阅读 4,014评论 0 1
  • 2015年的时候,我大学三年时光结束了,而她才刚刚大二,六月份以后,我没有去找工作,在家考驾照,当时参加了专升本考...
    深情的烟灰阅读 1,937评论 1 3