【发布时间】:2023-01-15 03:56:06
【问题描述】:
我有一个类 BLEValue,它有一个名为 m_accumulation 的成员,类型为 String。我使用这个成员来累积通过蓝牙接收到的数据(15000 字节),直到接收到整个数据,然后这个m_accumulation 将被读取并且不再需要它保存的数据因此它被设置为""。
void BLEValue::addPart(uint8_t *pData, size_t length)
{
log_v("Adding part to m_accumulation. Current free heap: %d", ESP.getFreeHeap());
m_accumulation += std::string((char *)pData, length);
}
void BLEValue::clear()
{
m_accumulation = "";
m_accumulation.clear(); // I think it does the same as the previous line
}
问题是在清空m_accumulation 后,为此类成员在堆中分配的内存将不会再次释放。我可以使用函数ESP.getFreeHeap() 来检查它。我认为这是因为 BLEValue 类的对象仍然存在,因此为其分配的堆内存在对象被杀死之前不会被释放。是真的吗?
有没有办法在读取它的值后清空分配给这个String的堆内存而不完全删除BLEValue对象?
【问题讨论】:
标签: c++ string heap-memory