关闭

字符内存动态分配管理类(CAutoMem)

标签: deletenullc++class
1062人阅读 评论(0) 收藏 举报
分类:

#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);
}

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:304112次
    • 积分:3923
    • 等级:
    • 排名:第8337名
    • 原创:81篇
    • 转载:21篇
    • 译文:0篇
    • 评论:37条
    最新评论
    我的链接