C++ 内存管理与封装类

在阅读开源HPSOCKET 底层代码时,对于内存管理和封装类新的理解。

对于内存管理方面,总是害怕在运行过程中出现各种各样的内存泄漏问题,我曾经想过利用封装类对new和delete进行管理,却总是差点感觉,依旧用起来那么麻烦。

而作者巧妙的利用了模板和封装解决了这个问题。

例如 读写锁类 仅仅只需要使用的方法

class CSWMR
{
public:
	VOID WaitToRead();
	VOID WaitToWrite();
	VOID ReadDone()  { Done(); }
	VOID WriteDone() { Done(); }

private:
	VOID Done();

public:
	CSWMR();
	~CSWMR();

private:
	CSWMR(const CSWMR&);
	CSWMR operator = (const CSWMR&);

private:
	int m_nWaitingReaders;		//等待读的客户端数
	int m_nWaitingWriters;		//等待写的客户端数
	int m_nActive;				//活跃的客户端数

	CSpinGuard	m_cs;
	CSEM		m_smRead;
	CSEM		m_smWrite;
};

将其重命名typedef CSWMR CSimpleRWLock;

写个对于读操作的锁模板类  在构造函数进行初始化以及功能函数 析构时自动处理

template<class CLockObj> class CLocalReadLock
{
public:
	CLocalReadLock(CLockObj& obj) : m_wait(obj) { m_wait.WaitToRead(); }
	~CLocalReadLock() { m_wait.ReadDone(); }
private:
	CLocalReadLock(const CLocalReadLock&);
	CLocalReadLock operator = (const CLocalReadLock&);
private:
	CLockObj& m_wait;
};

typedef CLocalReadLock<CSimpleRWLock> CReadLock;

//读操作 线程到达进行等待读取。直到读取完毕。自动析构


比如在读文件的函数Readfile()

{

CReadLock readLock;

}

在函数处理时自动对线程数据进行加锁保护 --如果有别的线程在进行读写操作则等待对方操作完成继续执行

离开函数时临时对象自动析构。进行Unlock行为。

这样对于内存管理就十分明朗了。



阅读更多
文章标签: C++
个人分类: C++
想对作者说点什么? 我来说一句

C++ ADO封装类.

2008年12月05日 23KB 下载

c++内存管理 c++实现

2011年04月28日 7KB 下载

C++内存管理课件——侯捷老师

2017年07月16日 34MB 下载

CC++中的内存管理

2009年11月24日 44KB 下载

操作系统内存管理C++模拟

2010年06月25日 16KB 下载

linux epoll的封装类

2010年01月14日 2KB 下载

没有更多推荐了,返回首页

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭