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

原创 2006年06月22日 09:57:00

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

相关文章推荐

一个字符变量存储到动态分配内存引发的输入问题解决--连续输入scanf函数存在缓冲区的问题

运用 malloc 开辟内存对字符串输入进行存储,为什么输出不是输入的呢?改成整形变量就行了呢 RT...

动态内存管理类

非常好的例子,有许多需要注意的地方,所以单独写一篇博客 通过动态内存管理实现vector #ifndef _VECTOR_H_ #define _VECTOR_H_ #include #in...

C++ Primer : 第十三章 : 动态内存管理类

动态内存管理类,使用allocator和move函数。
  • JY_95
  • JY_95
  • 2015年09月04日 10:27
  • 505

C#的动态内存管理类

前两天看到的一个c#的内存管理 DynamicBufferManager.cs 稍微阉割了一下

内存管理内幕-动态分配的选择、折衷和实现

http://www.ibm.com/developerworks/cn/linux/l-memory/   为什么必须管理内存 内存管理是计算机编程最为基本的领域之一。在很多脚本语言中...

内存管理内幕动态分配的选择、折衷和实现

Jonathan Bartlett (johnnyb@eskimo.com), 技术总监, New Media Worx 简介: 本文将对 Linux™ 程序员可以使用的内存管理技术进行概述,虽...

深入探讨PHP中的内存管理,PHP动态分配和释放内存

摘要 内存管理对于长期运行的程序,例如服务器守护程序,是相当重要的影响;因此,理解PHP是如何分配与释放内存的对于创建这类程序极为重要。本文将重点探讨PHP的内存管理问题。   一、 内存 ...

内存管理内幕 --- 动态分配的选择、折衷和实现【转】

今天看到一篇好文,遂转之。  url: http://www.ibm.com/developerworks/cn/linux/l-memory/ 简介: 本文将对 Linux™ 程序员可以使用的内存...
  • phpwish
  • phpwish
  • 2012年08月16日 14:23
  • 679

STL容器存储的内容动态分配情况下的内存管理

看下面两段代码, typedef pairVirObjTYPE, std::listCheckID>*> VirObj_CheckID_pair;class LangChecker{public: ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:字符内存动态分配管理类(CAutoMem)
举报原因:
原因补充:

(最多只允许输入30个字)