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堆管理类
原文地址:https://www.cnblogs.com/admin11/p/2594851.html