惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Hacker News: Ask HN
Hacker News: Ask HN
IT之家
IT之家
S
SegmentFault 最新的问题
T
Tailwind CSS Blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
博客园 - 司徒正美
J
Java Code Geeks
博客园 - 聂微东
雷峰网
雷峰网
阮一峰的网络日志
阮一峰的网络日志
The Cloudflare Blog
博客园_首页
大猫的无限游戏
大猫的无限游戏
博客园 - 三生石上(FineUI控件)
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
博客园 - 【当耐特】
腾讯CDC
Apple Machine Learning Research
Apple Machine Learning Research
酷 壳 – CoolShell
酷 壳 – CoolShell
V
V2EX
宝玉的分享
宝玉的分享
小众软件
小众软件
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
Hugging Face - Blog
Hugging Face - Blog
月光博客
月光博客
NISL@THU
NISL@THU
T
The Exploit Database - CXSecurity.com
C
CXSECURITY Database RSS Feed - CXSecurity.com
WordPress大学
WordPress大学
有赞技术团队
有赞技术团队
Blog — PlanetScale
Blog — PlanetScale
aimingoo的专栏
aimingoo的专栏
L
LINUX DO - 热门话题
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
F
Fortinet All Blogs
博客园 - Franky
L
Lohrmann on Cybersecurity
S
Secure Thoughts
量子位
V
Vulnerabilities – Threatpost
Last Week in AI
Last Week in AI
博客园 - 叶小钗
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
L
LINUX DO - 最新话题
I
InfoQ
C
CERT Recently Published Vulnerability Notes
Security Archives - TechRepublic
Security Archives - TechRepublic
P
Proofpoint News Feed
G
GRAHAM CLULEY
Cisco Talos Blog
Cisco Talos Blog

博客园 - 荣-

学习实践:使用模式,原则实现一个C++自动化测试程序 学习实践:使用模式,原则实现一个C++数据库访问类 C++字符转换等常用方法 字符串处理代码(国际化转换C++版) 我的C++数据库访问库--临界区处理类 我的C++数据库访问库 批处理文件的学习 C++中,以类成员函数指针作为参数对std::map中的元素进行迭代处理 取得MySQL数据库表,列信息的SQL语句 我的我的C#数据库操作类(与大家交流) ACE项目的重构整理 安装SQL Server 2000和sp补丁时,安装程序提示"以前的某个程序安装已在安装计算机上创建挂起的文件操作。运行安装程序之前必须重新启动计算机"。 我的计算机安装步骤 创建oracle用户 我的重构步骤 我的C++代码检查列表 PowerDesigner高级应用 文档的阅读 如何设计类
DLL内存管理模板类
荣- · 2012-07-17 · via 博客园 - 荣-

在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堆管理类