C 實現的Buffer類

2022-02-01 12:40:42 字數 2160 閱讀 9209

寫c#的同志一定覺得byte 比c++的 byte * 加 length的方式好的多。一來,只需要乙個物件就可以是表示一段位元組流,另一方面,由於c#的特性,不需要象c++那樣還要記得刪除指標。由於我工作中,需要頻繁地試用c#和c++,所以寫了個c++的類,以便方便地管理位元組流。

很簡單,先定義乙個類:cmemorybuffer。位元組流內部可以用std::vector來儲存,當然,考慮到效率,有些地方處理還是要考慮下。先把**貼出來,然後解釋為什麼這麼做。

標頭檔案:

#include #include 

#include

using

namespace

std;

class

cmemorybuffer

void

clear() ;

int getlength() const

bool isempty() const

public

: vector

m_vctbuffer;

};

cpp檔案:

#include "

stdafx.h

"#include

"memorybuffer.h

"cmemorybuffer::cmemorybuffer(

void

)

cmemorybuffer::~cmemorybuffer(void

)

cmemorybuffer::cmemorybuffer(

const cmemorybuffer &other)

cmemorybuffer::cmemorybuffer(

const byte *tpbytes ,int

tilength)

void

cmemorybuffer::clear()

const byte * cmemorybuffer::c_bytes() const

byte * cmemorybuffer::copyout(int &tilength) const

void cmemorybuffer::copyfrom(const byte * tpbytes , int

tilength)

tilength)

void cmemorybuffer::insert(int tistartindex,const byte * tpbytes , int

tilength)

else

if((tistartindex + tilength) else

}

void cmemorybuffer::copyto(const byte ** tppbytes, int &tilength)const

cmemorybuffer & cmemorybuffer::operator = (const cmemorybuffer &other)

return *this

; }

cmemorybuffer & cmemorybuffer::operator += (const cmemorybuffer &other)

return *this

; }

解釋下幾點:

1、void cmemorybuffer::clear()

這地方之所以要這麼寫,是因為vector有個毛病,clear後記憶體空間還不釋放,需要物件釋放後才釋放,如果頻繁操作乙個大的位元組流,怕影響   記憶體效能.

2、void cmemorybuffer::copyfrom(const byte * tpbytes , int tilength)

{this->clear();

if(tpbytes == null || tilength == 0) return;

m_vctbuffer.resize(tilength,0);

memcpy(&m_vctbuffer[0],tpbytes,tilength);

很多人可能會寫成乙個迴圈語句:

for(int i = 0; i < tilength; i ++)

m_vctbuffer.push_back(tpbytes[i]);

這樣寫效率太低。

** :

C 實現的Buffer類

寫c 的同志一定覺得byte 比c 的 byte 加 length的方式好的多。一來,只需要乙個物件就可以是表示一段位元組流,另一方面,由於c 的特性,不需要象c 那樣還要記得刪除指標。由於我工作中,需要頻繁地試用c 和c 所以寫了個c 的類,以便方便地管理位元組流。很簡單,先定義乙個類 cmemo...

C 實現的Buffer類

寫c 的同志一定覺得byte 比c 的 byte 加 length的方式好的多。一來,只需要乙個物件就可以是表示一段位元組流,另一方面,由於c 的特性,不需要象c 那樣還要記得刪除指標。由於我工作中,需要頻繁地試用c 和c 所以寫了個c 的類,以便方便地管理位元組流。很簡單,先定義乙個類 cmemo...

C 實現的Buffer類

寫c 的同志一定覺得byte 比c 的 byte 加 length的方式好的多。一來,只需要乙個物件就可以是表示一段位元組流,另一方面,由於c 的特性,不需要象c 那樣還要記得刪除指標。由於我工作中,需要頻繁地試用c 和c 所以寫了個c 的類,以便方便地管理位元組流。很簡單,先定義乙個類 cmemo...