自动释放资源的模板类
来源:互联网 发布:ac尼尔森中国奶粉数据 编辑:程序博客网 时间:2024/06/05 10:16
/** * @file CNewBuffMngr.h * @brief 用new[]操作符创建数组并管理对应的内存 * * Developer can include this file in your project to build applications. * For more information, please read the developer guide. * Use of this software is subject to certain restrictions and limitations set * forth in a license agreement entered into between iFLYTEK, Co,LTD. * and the licensee of this software. Please refer to the license * agreement for license use rights and restrictions. * * Copyright (C) 1999 - 2008 by ANHUI USTC iFLYTEK, Co,LTD. * All rights reserved. * * @author minglu2 * @version 1.0 * @date 2017/06/09 * * @see * * History: * index version date author notes * 0 1.0 2017/06/09 minglu2 Create this file */#ifndef _CNEWBUFFMNGR_H_#define _CNEWBUFFMNGR_H_#ifdef __cplusplusextern "C" {#include <stdio.h>#endif#ifdef __cplusplus}#endif#include <stdio.h>/************************************************************************//* 创建并管理一个数组,此数组不可跨函数使用 *//************************************************************************/template <typename Element_Type>class CNewBuffMngr{public://创建一个内存并返回首地址CNewBuffMngr(Element_Type*& pElement, size_t Size_Of_Array){pElement = new Element_Type[Size_Of_Array];memset(pElement, 0, Size_Of_Array);m_pElement = pElement;}~CNewBuffMngr(){if (m_pElement){delete[] m_pElement;m_pElement = NULL;}}protected:private:CNewBuffMngr& operator=(const CNewBuffMngr&);CNewBuffMngr(const CNewBuffMngr&); Element_Type* m_pElement;};/************************************************************************//* 创建并管理一个文件句柄,此数组不可跨函数使用 *//************************************************************************/class CFileMng{public:/** * @ func: CFileMng* @ brief: 按照指定模式打开指定文件,并返回对应的文件指针,如果出错则返回NULL* * @author iFLYTEK* Access: public * @return: 出错则返回NULL;否则返回文件指针* @param: FILE * & pFile [out] 可能为NULL* @param: const char * file_patch 文件路径* @param: const char * mode 打开模式* @see*/CFileMng(FILE* &pFile ,const char* file_patch, const char* mode){if (file_patch && mode){m_pFile = fopen(file_patch, mode);}else{//参数不合法m_pFile = NULL;}pFile = m_pFile;}~CFileMng(){if (m_pFile){fclose(m_pFile);m_pFile = NULL;}}protected:private:CFileMng& operator=(const CFileMng&);CFileMng(const CFileMng&);FILE* m_pFile;};/************************************************************************//* 普通的资源管理模块,在对象析构时调用注册进来的回调函数。 *//************************************************************************/typedef void* (*CallBack_Func_Type)(void*);class CCommonResMng{public:/** * @ func: CCommonResMng* @ brief: 根据外部资源极其释放函数来生成一个资源管理对象* @author iFLYTEK* Access: public * @return: * @param: void * pRes 资源* @param: CallBack_Func_Type pRelease_Source_Callback_Fun 指向用于释放资源的函数* @see*/CCommonResMng(void *pRes ,CallBack_Func_Type pRelease_Source_Callback_Fun){m_pRes = pRes;m_pRelease_Source_Callback_Fun = pRelease_Source_Callback_Fun;}virtual ~CCommonResMng(void){if (m_pRes && m_pRelease_Source_Callback_Fun){m_pRelease_Source_Callback_Fun(m_pRes);m_pRelease_Source_Callback_Fun = NULL;}}protected:private:CallBack_Func_Type m_pRelease_Source_Callback_Fun; //函数指针,指向用于释放资源的回调函数void* m_pRes; //指向外部的资源实体对象};#endif //_CNEWBUFFMNGR_H_将资源管理类和boost/shared_ptr结合使用,则可以解决跨域情况下的资源管理问题。即保证资源管理类所生成的对象有且仅被析构一次。
阅读全文
0 0
- 自动释放资源的模板类
- 函数资源的自动释放
- try()语句,自动资源释放
- 动态分配资源的自动释放 - auto_ptr的实现原理
- 动态分配资源的自动释放 – auto_ptr的实现原理
- 动态分配资源的自动释放 – auto_ptr的实现原理
- 动态分配资源的自动释放 – auto_ptr的实现原理
- 动态分配资源的自动释放 – auto_ptr的实现原理
- 动态分配资源的自动释放 – auto_ptr的实现原理 .
- 动态分配资源的自动释放 – auto_ptr的实现原理
- 动态分配资源的自动释放 – auto_ptr的实现原理
- 动态分配资源的自动释放 – auto_ptr的实现原理
- 实现C语言自动释放资源的方法与探讨
- 通过RAII机制实现资源的自动释放
- Java7新的try-with-resources语句,自动资源释放
- 在子类释放时,先释放子类资源,然后调用父类的释放函数释放父类资源
- 一个MFC释放资源的类
- C# Bitmap类释放资源的方法
- 读写锁和两种同步方式的对比
- 第03讲 mysql创建数据库
- C#Winform程序前景无限
- 《数据库SQL实战》查找所有员工的last_name和first_name以及对应部门编号dept_no,也包括展示没有分配具体部门的员工
- Windows Socket 非阻塞模式开发
- 自动释放资源的模板类
- 如何根据CIFAR-10的格式制作自己的数据集(C/C++版)
- Error:Execution failed for task ':app:processDebugManifest'. > Manifest merger failed with multiple
- 用javascript实现base64编码器
- scrollview嵌套listview 滑动事件冲突的解决方法
- 编写Java程序,制作万年历。
- 树莓派3b入门指南
- 小知识 大智慧
- [转]通过jstack日志分析和问题排查