如何优雅的写C++代码 Obotcha介绍(ByteArray类)

本文介绍Obotcha框架中用于内存管理的ByteArray类,该类借鉴了QByteArray的设计,提供内存分配、复制和调整大小等功能。ByteArray通过malloc进行内存分配,并记录内存大小,支持内存复制和动态调整内存大小。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

    C/C++中分配内存主要使用的就是mallc和new,但是如果随意申请内存,就无法做到自动回收。所以在Obotcha中,使用了一个ByteArray的类来管理内存。申请一段内存可以使用直接调用createByteArray(int size)接口来获取。ByteArray构造函数内部处理如下:

_ByteArray::_ByteArray(int length) {
    buff = (char *)malloc(length);
    memset(buff,0,length);
    _size = length;
}

实际上就是一个malloc处理,同时标记了这块内存的大小。内存的copy也可以通过copy构造函数来实现:

_ByteArray::_ByteArray(sp<_ByteArray> b) {
    buff = (char *)malloc(b->size());
    memcpy(buff,b->toValue(),b->size());
}

ByteArray也可以调用resize来扩大内存

bool _ByteArray::resize(int size) {
    if(size <= _size) {
        return false;
    }

    char *toFree = buff;

    buff = (char *)malloc(size);
    memset(buff,0,size);
    memcpy(buff,toFree,_size);
    _size = size;

    if(toFree != nullptr) {
        free(toFree);
    }

    return true;
}

Obotcha中,所有申请的内存块都会以ByteArray来存放。例如FileOutputStream的写操作:

bool _FileOutputStream::write(ByteArray buff,long size) {
    char *p = buff->toValue();
    printf("write %s,size is %d \n",p,buff->size());
    
    
    fstream.write(buff->toValue(),size);
    return true;
}

PS:用过QT的同学可能会觉得这个和QByteArray很像。哈哈,的确,ByteArray的设计就是参考QByteArray来做的。

ByteArray代码如下:

https://github.com/wangsun1983/Obotcha/blob/master/lang/ByteArray.cpp

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值