字符内存动态分配管理类(CAutoMem)
2006-06-22 09:57
363 查看
#if !defined(AFX_CAutoMem_H__INCLUDED_)
#define AFX_CAutoMem_H__INCLUDED_
/*****************************************************************/
//name : automem.h
//function : 字符内存动态分配管理类(CAutoMem)声明,主要为了
// : 完成 new 出来一段内存,在程序 delete 内存的过程前
// : 出现异常,导致 该段内存泄漏;引入 c++ 的栈内内存自
// : 动释放机制,有效解决这个问题.
//copyright : radfort
//author : hzh
//date : 2006-06-21
/**************************************************************/
class CAutoMem
{
private:
unsigned int m_size;
char *m_buff;
//CAutoMem(CAutoMem &rhs);
//CAutoMem& operator=(CAutoMem &rhs);
public:
CAutoMem(unsigned int nsize);
//拷贝构造函数
CAutoMem(const CAutoMem &rhs);
~CAutoMem(void);
//赋值运算符
CAutoMem& operator=(const CAutoMem &rhs);
//得到内存起始地址
char * Get(void) const;
//置空分配内存
char * Set(void) const;
//重新分配内存
void Renew(unsigned int nsize);
//得到分配内存的长度
unsigned int Length() const;
};
#endif
/**********************************************************/
//name : automem.cpp
//function : 字符内存动态分配管理类(CAutoMem) 实现
//copyright : radfort
//author : hzh
//date : 2006-06-21
/**********************************************************/
#include "automem.h"
/*****************************************************************/
///name : CAutoMem
//function : 构造函数
//access : public
//para : none
//return : of no use
//author : hzh
//date : 2006-06-20
/*****************************************************************/
CAutoMem::CAutoMem(unsigned int nsize):m_size(nsize),
m_buff(new char[m_size])
{
memset(m_buff,0,m_size);
}
/*
CAutoMem::CAutoMem(CAutoMem &rhs)
{
m_buff = new char[rhs.Length()];
if(m_buff)
{
memcpy(m_buff,rhs.Get(),rhs.Length());
}
}
*/
//拷贝构造函数
CAutoMem::CAutoMem(const CAutoMem &rhs)
{
m_buff = new char[rhs.Length()];
if(m_buff)
{
memcpy(m_buff,rhs.Get(),rhs.Length());
}
}
//赋值运算符
CAutoMem& CAutoMem::operator=(const CAutoMem &rhs)
{
if(this == &rhs)
{
return *this;
}
if(m_buff)
{
delete []m_buff;
m_buff = NULL;
}
m_buff = new char[rhs.Length()];
if(m_buff)
{
memcpy(m_buff,rhs.Get(),rhs.Length());
}
return *this;
}
/*
CAutoMem &CAutoMem::operator=(CAutoMem &rhs)
{
if(this == &rhs)
{
return *this;
}
if(m_buff)
{
delete []m_buff;
m_buff = NULL;
}
m_buff = new char[rhs.Length()];
if(m_buff)
{
memcpy(m_buff,rhs.Get(),rhs.Length());
}
return *this;
}
*/
//自动析构释放内存
CAutoMem::~CAutoMem(void)
{
delete []m_buff;
m_buff = NULL;
}
// 得到内存起始地址
char * CAutoMem::Get(void) const
{
return m_buff;
}
//得到分配内存的长度
unsigned int CAutoMem::Length() const
{
return m_size;
}
//置空分配内存
char * CAutoMem::Set() const
{
memset(m_buff,0,m_size);
return m_buff;
}
//重新分配内存
void CAutoMem::Renew(unsigned int nsize)
{
if(m_buff)
{
delete []m_buff;
m_buff = NULL;
}
m_size = nsize;
m_buff = new char[m_size];
memset(m_buff,0,m_size);
}
#define AFX_CAutoMem_H__INCLUDED_
/*****************************************************************/
//name : automem.h
//function : 字符内存动态分配管理类(CAutoMem)声明,主要为了
// : 完成 new 出来一段内存,在程序 delete 内存的过程前
// : 出现异常,导致 该段内存泄漏;引入 c++ 的栈内内存自
// : 动释放机制,有效解决这个问题.
//copyright : radfort
//author : hzh
//date : 2006-06-21
/**************************************************************/
class CAutoMem
{
private:
unsigned int m_size;
char *m_buff;
//CAutoMem(CAutoMem &rhs);
//CAutoMem& operator=(CAutoMem &rhs);
public:
CAutoMem(unsigned int nsize);
//拷贝构造函数
CAutoMem(const CAutoMem &rhs);
~CAutoMem(void);
//赋值运算符
CAutoMem& operator=(const CAutoMem &rhs);
//得到内存起始地址
char * Get(void) const;
//置空分配内存
char * Set(void) const;
//重新分配内存
void Renew(unsigned int nsize);
//得到分配内存的长度
unsigned int Length() const;
};
#endif
/**********************************************************/
//name : automem.cpp
//function : 字符内存动态分配管理类(CAutoMem) 实现
//copyright : radfort
//author : hzh
//date : 2006-06-21
/**********************************************************/
#include "automem.h"
/*****************************************************************/
///name : CAutoMem
//function : 构造函数
//access : public
//para : none
//return : of no use
//author : hzh
//date : 2006-06-20
/*****************************************************************/
CAutoMem::CAutoMem(unsigned int nsize):m_size(nsize),
m_buff(new char[m_size])
{
memset(m_buff,0,m_size);
}
/*
CAutoMem::CAutoMem(CAutoMem &rhs)
{
m_buff = new char[rhs.Length()];
if(m_buff)
{
memcpy(m_buff,rhs.Get(),rhs.Length());
}
}
*/
//拷贝构造函数
CAutoMem::CAutoMem(const CAutoMem &rhs)
{
m_buff = new char[rhs.Length()];
if(m_buff)
{
memcpy(m_buff,rhs.Get(),rhs.Length());
}
}
//赋值运算符
CAutoMem& CAutoMem::operator=(const CAutoMem &rhs)
{
if(this == &rhs)
{
return *this;
}
if(m_buff)
{
delete []m_buff;
m_buff = NULL;
}
m_buff = new char[rhs.Length()];
if(m_buff)
{
memcpy(m_buff,rhs.Get(),rhs.Length());
}
return *this;
}
/*
CAutoMem &CAutoMem::operator=(CAutoMem &rhs)
{
if(this == &rhs)
{
return *this;
}
if(m_buff)
{
delete []m_buff;
m_buff = NULL;
}
m_buff = new char[rhs.Length()];
if(m_buff)
{
memcpy(m_buff,rhs.Get(),rhs.Length());
}
return *this;
}
*/
//自动析构释放内存
CAutoMem::~CAutoMem(void)
{
delete []m_buff;
m_buff = NULL;
}
// 得到内存起始地址
char * CAutoMem::Get(void) const
{
return m_buff;
}
//得到分配内存的长度
unsigned int CAutoMem::Length() const
{
return m_size;
}
//置空分配内存
char * CAutoMem::Set() const
{
memset(m_buff,0,m_size);
return m_buff;
}
//重新分配内存
void CAutoMem::Renew(unsigned int nsize)
{
if(m_buff)
{
delete []m_buff;
m_buff = NULL;
}
m_size = nsize;
m_buff = new char[m_size];
memset(m_buff,0,m_size);
}
相关文章推荐
- ANSI C动态内存分配与管理函数详解
- 智能指针的模板,用来管理动态分配的内存
- C++内存动态分配及管理
- 内存动态分配管理
- SQL服务器内存有两种基本管理方法:动态分配和静态分配
- 智能指针模板,要管理动态分配的内存
- C语言学习9: malloc动态内存存储,动态内存分配去空格字符增长版,动态内存分配去符号incr增长版,型参和返回值都是int型的函数的指针,main函数的地址也可以用指针指向,typedef定义函数指针,函数定义与嵌套的作用,返回函数指针类型,const作用
- SQL服务器内存有两种基本管理方法:动态分配和静态分配
- SQL服务器内存有两种基本管理方法:动态分配和静态分配
- SQL服务器内存有两种基本管理方法:动态分配和静态分配
- 改变指针指向的字符内容、动态分配字符型指针变量内存空间
- 解析PHP中的内存管理,PHP动态分配和释放内存
- 内存的堆分配和栈分配 & 字符数组,字符指针,Sizeof总结
- 2017.8.21 动态分配和撤销内存的运算符new和delete
- 内存动态分配和垃圾自动回收机制(一)
- DirectFB内存分配与管理:surface pool
- keil c51的内部RAM(idata)动态内存管理程序(转)
- 全面介绍Windows内存管理机制及C++内存分配实例(二):内存状态查询
- 静态内存分配-链表管理(2)实现
- Android JNI编程(五)——C语言的静态内存分配、动态内存分配、动态创建数组