美文网首页
C++ 复杂结构体的内存管理

C++ 复杂结构体的内存管理

作者: QuentinnYANG | 来源:发表于2018-10-30 15:24 被阅读0次

说明

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;
}

相关文章

  • C++ 复杂结构体的内存管理

    说明 C++ 中使用 new 和 delete 进行内存的申请和释放,二者成对出现。使用 new 申请的内存在堆中...

  • iOS开发: 一个NSObject对象究竟占用多少内存?

    OC对象的是基于C/C++的结构体实现的,一个NSObject占用的内存其实就是一个结构体占用的内存,这个结构体...

  • C++之内存布局

    在C++之内存管理一文中,我们已经了解到C++的内存管理,这里介绍C++的典型内存布局结构。 1、总体来说,C/C...

  • c++类相关

    c++结构体与c结构体的区别 c语言 c++ c++类的使用 类的权限管理 对类的成员的访问做限制 private...

  • 指针

    C++(大多数语言的)内存结构 (1)内存结构图 (2)不同的管理区域  (1)名称  (2)作用  (3)管理特...

  • c++内存管理

    c++内存管理长文 c++内存管理

  • 内存管理

    内容包括: C++内存管理 Java内存管理 C++内存管理 内存分配方式 在C++中,内存分成5个区,分别是栈、...

  • NSObject占用内存大小

    内存对齐:我们知道OC对象就是C++结构体,而结构体的大小必须是最大成员大小的倍数,当在多了一个height以后,...

  • 基础知识点

    c++中union的使用 union主要是共享内存,分配内存以其最大的结构体或对象为大小,即sizeof最大的。 ...

  • 结构体内存对齐

    前言 OC语言底层是基于c和c++的,而NSObject在底层也是用结构体实现的,所以了解了结构体的内存对齐问题对...

网友评论

      本文标题:C++ 复杂结构体的内存管理

      本文链接:https://www.haomeiwen.com/subject/zwegtqtx.html