首页 > 系统相关 >C++管理堆上内存

C++管理堆上内存

时间:2023-04-23 14:46:56浏览次数:33  
标签:const 管理 C++ member TMlloc 内存 delete

  代码中如果有使用到堆上内存,必然涉及到内存的释放时机问题,有别于python的try...finally语法,C++中要实现类似的语法则显得比较困难,因此需要另辟蹊径,用栈内存的自动释放管理堆内存的释放。

  思路如下,用一个类包装好堆内存的分配(构造)和释放(析构),包装类在函数中调用时均为栈上分配,因而包装类在函数结束处(正常结束or中途return)均可以自动调用析构函数。代码如下:

 

template<typename T>
class TMlloc final{
public:
    TMlloc();
    ~TMlloc();
    TMlloc(const TMlloc<T>& t) = delete;
    TMlloc<T>& operator=(const TMlloc<T>& t) = delete;

    T* getMember() const;
private:
    T* member_ = nullptr;
};

template<typename T>
TMlloc<T>::TMlloc() {
    member_ = new T();
}

template<typename T>
TMlloc<T>::~TMlloc() {
    if (member_)
        delete member_;
    member_ = nullptr;
}

template<typename T>
inline T* TMlloc<T>::getMember() const
{
    return member_;
}

标签:const,管理,C++,member,TMlloc,内存,delete
From: https://www.cnblogs.com/fayevalentine/p/17346489.html

相关文章

  • 推动变革,打造全新的全面预算管理解决方案
    企业在迈向可持续的数字化进程时,其数字战略很少能够跟得上甚至超过业务需求。一些企业可能会尝试将现有的流程和技术在短期内加速整合,以减少现实差距。但从长远来看,这种方式可能会影响企业的效率、增长和敏捷性。因此,思考如何改进流程、正确处理技术变革,才能够促进更有效的数字化转......
  • Linux权限管理及用户与用户组
    摘要:第一部分:Linux权限管理一、基本权限linux权限机制采用UGO模式。其中u(user)表示所属用户、g(group)表示所属组、o(other)表示除了所属用户、所属组之外的情况。u、g、o都有读(read)、写(write)、执...第一部分:Linux权限管理一、基本权限    linux权限机制采用UGO模......
  • abp(net core)+easyui+efcore实现仓储管理系统——组织管理升级之下(六十二)
    Abp(netcore)+easyui+efcore实现仓储管理系统目录abp(netcore)+easyui+efcore实现仓储管理系统——ABP总体介绍(一)abp(netcore)+easyui+efcore实现仓储管理系统——解决方案介绍(二)abp(netcore)+easyui+efcore实现仓储管理系统——领域层创建实体(三) abp(netcore)+eas......
  • 写程序分析堆内存溢出和栈内存溢出
    打jar包用命令java-jar xxx.jar写程序分析堆内存溢出packagecom.mvntest.mvn;importjava.util.ArrayList;importjava.util.List;publicclassHeapOOM{ publicstaticvoidmain(String[]args)throwsInterruptedException{ intsize=1024*1024*8; List<......
  • 一文读懂火山引擎数智平台 VeDI 新品——管理驾驶舱 Plus
     更多技术交流、求职机会,欢迎关注字节跳动数据平台微信公众号,回复【1】进入官方交流群4月18日,2023春季火山引擎FORCE原动力大会在上海举行,火山引擎发布数智平台(VeDI)新品——“管理驾驶舱Plus”。企业管理者在决策时往往需要各方面的数据作为依据,火山引擎VeDI此次发布的......
  • 基于SqlSugar的开发框架循序渐进介绍(28)-- 快速构建系统参数管理界面
    在参照一些行业系统软件的时候,发现一个做的挺不错的系统功能-系统参数管理,相当于把任何一个基础的系统参数碎片化进行管理,每次可以读取一个值进行管理,这样有利于我们快速的处理业务需求,是一个挺好的功能。本篇随笔模拟这个功能,基于SqlSugar开发框架的基础上,利用代码生成工具快速生......
  • 一文读懂火山引擎数智平台 VeDI 新品——管理驾驶舱 Plus
    更多技术交流、求职机会,欢迎关注字节跳动数据平台微信公众号,回复【1】进入官方交流群 4月18日,2023春季火山引擎FORCE原动力大会在上海举行,火山引擎发布数智平台(VeDI)新品——“管理驾驶舱Plus”。 企业管理者在决策时往往需要各方面的数据作为依据,火山引擎VeDI此次......
  • 基于django+ansible+webssh运维自动化管理系统
    基于django+ansible+webssh运维自动化管理系统 前言最初开发这个基于Djangoansible运维自动化管理系统的想法其实从大学时候就已经有了,但是苦于技术原因和没有线上环境原因一直没有开发,现在有了这个技术和环境之后开始着手开发了这个项目,项目难点在于你要理解如何设计数据库,......
  • 实验1:软件项目管理中的进度管理与资源管理
    实验1:软件项目管理中的进度管理与资源管理通过本次实验,学生将掌握以下内容:1、掌握Project2010中甘特图显示项目进度。2、掌握Project2010中的关键路径法,得到项目的关键路径与关键活动。3、掌握Project2010中资源的创建与分配资源。 [实验任务一]:Project2010中的项目......
  • c++.12
    复习:  1、输出缓冲区    满足哪些条件会刷新输出缓冲区:    1、遇到'\n'    2、遇到输入语句    3、缓冲区满4k    4、程序正常结束    5、fflush(stdout)  2、输入缓冲区    1、当想要输入的是整型、......