zoukankan      html  css  js  c++  java
  • DLL内存管理模板类 荣

    在DLL中,经常会遇到堆中内存释放的问题,特别是MT(MTd)下的DLL。
    本模板类就是对DLL堆中申请的内存进行管理的。
    主要功能:
    1: 申请堆中内存;
    2: 释放内存时,判断传入的内存指针参数是否是本DLL申请的内存;
    3: 析构时,对与没有delete的内存自动delete,以免内存泄漏。
     
    主要接口:
    1:T* Create(): 在堆中创建对象,并返回指针,该指针已经被管理。
    2: bool Release(T* t):释放堆中释放的对象,并解除对指针的管理。
    3: ~DllMemeryMng(): 析构函数,释放未释放的堆对象。
     
    代码:
    #pragma once 

    /**
    * @defgroup DLL堆管理类
    * @brief DLL堆管理类
    *    @author 徐敏荣
    * @date 2012-06-14
    *
    * @par 修订历史
    * @version v0.5 \n
    *    @author 徐敏荣
    * @date 2012-06-14
    * @li 初始版本
    * @{
    */
     

    #include <vector>
    #include <algorithm>

    using namespace std;

    namespace His
    {
        /**
        * @brief DLL堆管理类
        * @note 非线程安全类
        *
        */

        template<typename T>
        class DllMemeryMng
        {
        public:

            /**
            * @brief 析构函数,防止内存泄漏。
            */

            ~DllMemeryMng()
            {
                for (vector<T*>::iterator it = this->list.begin();
                    it != this->list.end(); ++it)
                {
                    delete *it;
                }
                this->list.clear();
            }
        public:

            /**
            * @brief 在堆中创建对象,并返回指针,该指针已经被管理。
            * @retval 创建对象指针
            */

            T* Create()
            {
                T* t = new T();
                list.push_back(t);
                return t;
            }

            /**
            * @brief 释放堆中释放的对象,并解除对指针的管理。
            * @param[in] t    要释放的指针
            * @retval true:成功,false;失败
            */

            bool Release(T* t)
            {
                vector<T*>::iterator it = 
                    find(this->list.begin(), this->list.end(), t);

                if (it == list.end())
                {
                    return false;
                }

                delete *it;

                list.erase(it);
                return true;
            }

        private:
            vector<T*> list;
        };
    }

    /**//** @}*/ // DLL堆管理类
  • 相关阅读:
    拟真世界精密驾驶挑战 《微软飞行模拟》新截图放出
    抖音“统治”美国年轻人
    Google Play商店为预注册的游戏和应用提供自动安装功能
    小米Note 10 Lite海外发布 无缘中国市场
    亚马逊允许数万名员工在家工作直到10月2日
    刷新 翻看 我 关注 实时 疫情 何时彻底“解封”?王辰院士:北京防疫未到松懈时
    “胡汉三”饰演者刘江今晨去世,享年95岁
    虎牙年报披露2019年扭亏为盈,腾讯操持下与斗鱼合并倒计时?
    微软宣布一批新获得Microsoft Teams认证的会议硬件
    美版健康码要来了!苹果Google被网友质疑:这是变相的监视系统吗?
  • 原文地址:https://www.cnblogs.com/admin11/p/2594851.html
Copyright © 2011-2022 走看看