template<class T> classSharedBuffer {public:
typedef T
*ObjectPointer;
SharedBuffer(
const SharedBuffer&rhs):
buffer_size(rhs.buffer_size), buffer_pointer(nullptr)
{
create_buffer();
memcpy(buffer_pointer, rhs.buffer_pointer,
sizeof(T) *buffer_size);
}

SharedBuffer
& operator= (const SharedBuffer&rhs) {if(this == &rhs) {return *this;
}

buffer_size
=rhs.buffer_size;if(buffer_pointer) {delete[] buffer_pointer;
buffer_pointer
=nullptr;
}

create_buffer();
memcpy(buffer_pointer, rhs.buffer_pointer,
sizeof(T) *buffer_size);
}
explicit SharedBuffer(const unsigned shortsize):
buffer_size(size), buffer_pointer(nullptr)
{
create_buffer();
}

ObjectPointer
operator()()const{returnbuffer_pointer;
}
~SharedBuffer() {if(buffer_pointer) {delete[] buffer_pointer;
buffer_pointer
=nullptr;
}
}
const unsigned short size() const{returnbuffer_size;
}
protected:voidcreate_buffer() {if(nullptr ==buffer_pointer) {
buffer_pointer
= newT[buffer_size];
}

buffer_zero();
}
voidbuffer_zero() {if(nullptr !=buffer_pointer) {
memset(buffer_pointer,
0x00, sizeof(T) *buffer_size);
}
}
private:
unsigned
shortbuffer_size;
ObjectPointer buffer_pointer;
};

 

标签: none

添加新评论