字符内存动态分配管理类(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);
}

(语法)理解结构指针和动态分配内存

结构体即我们自定义的数据类型,平时经常用到,结构体指针即将指针加入到一个类型中,理解结构体指针对学习指针可以进一步深入理解,并在链表等格式中运用非常广泛,以下面程序举例分析:...
  • itxxk
  • itxxk
  • 2016年03月22日 10:32
  • 1400

对象的动态内存分配

对象的动态内存分配 主要的就是对new和delete关键字的用法和要点  处理复制和赋值 如果没有在类中编写自己的复制构造函数和赋值运算符,C++将自动生成。默认的方法递归调用对象数据成员的复制...
  • GuFanYuan
  • GuFanYuan
  • 2015年03月05日 19:26
  • 722

c++类和动态内存分配

动态内存和类 特殊成员函数 1默认构造函数,如果你没有定义构造函数 2默认的析构函数,如果你没有定义析构函数 3复制构造函数,如果你没有定义 4赋值运算符,如果你没有定义 5地址运算符,如果你妹你没有...
  • god_wen
  • god_wen
  • 2016年09月30日 21:19
  • 498

C语言之动态分配内存

首先,我们应该知道,所有的程序都必须留出足够的内存空间来存储所使用的数据,所以我们经常会预先给程序开辟好内存空间,然后进行操作,但其实还有一种选择,能够让内存分配自动进行下去。对于传统数组,会遇到这样...
  • qq_26768741
  • qq_26768741
  • 2016年03月16日 12:26
  • 3294

Linux内核动态内存分配

在Linux中内核获取动态内存的方式相对进程是相当直接了当的。作为操作系统中优先级最高的成分,其内存请求不会被推迟,也不会插入任何针对编程错误的保护措施。其内存分配按其对象大致可分为三类:1. 连续页...
  • gufuguang
  • gufuguang
  • 2013年09月23日 09:49
  • 1313

C/C++动态分配与释放内存的区别详细解析

转自http://www.jb51.net/article/41723.htm 1. malloc()函数 1.1 malloc的全称是memory allocation,中文叫动态内存分配。 ...
  • a573233077
  • a573233077
  • 2016年01月14日 16:59
  • 3427

必须要注意的 C++ 动态内存资源管理(六)——vector的简单实现

十六.myVector分析         我们知道,vector类将其元素存放在连续的内存中。为了获得可接受的性能,vetor预先分配足够大的内存来保存可能需要的更多元素。vector的每个添加元...
  • y1196645376
  • y1196645376
  • 2016年11月04日 14:30
  • 862

C语言-动态分配内存对任意个字符串进行排序

//动态分配内存对输入的任意字符串排序 #include #include #include #include //比较大小 //int str_compare(const char* src,co...
  • u013147600
  • u013147600
  • 2015年06月01日 11:03
  • 1212

C语言动态内存分配与释放

内存静态存储区(static):全局变量、静态变量(static int a;) 内存动态存储区(栈stack):局部变量 内存自由存储区(堆heap):临时用数据 其中静态存储区、动态存储区的...
  • cymy001
  • cymy001
  • 2017年12月01日 05:04
  • 51

C++动态分配内存new delete

动态内存分配 1.堆内存分配 : C/C++定义了4个内存区间:代码区,全局变量与静态变量区,局部变量区即栈区,动态存储区,即堆(heap)区或自由存储区(free store)。 堆的概念...
  • lanmolei814
  • lanmolei814
  • 2014年08月27日 22:32
  • 1011
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:字符内存动态分配管理类(CAutoMem)
举报原因:
原因补充:

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