ACE_Message_Block中的数据如何清除
我的代码大致是这样的:首先有一个动态的char数组,存放数据
char *data = new char;
然后给通过recv_n把接到的数据给data
然后把data放到ACE_Message_Block中
ACE_Message_Block *mb = new ACE_Message_Block(n,ACE_Message_Block::MB_DATA,0,data);
然后就把mb交给别的线程去处理了. 所以在这里我不能用 delete[] data.把内存释放掉.
等到别的线程把mb消费了以后,调用mb->release().把mb释放掉.但是我发现其中的data不会被释放,于是就出现了内存泄漏. 难道在mb->release之后还有手动的把其中的data delete掉?
ACE对这种情况有没有什么方法来处理. 需要深入理解ACE的ACE_Message_Block,这是一个重要的类,系统的粘合剂,数据传递的载体。
你不需要用char * data = new char,只需要让ACE_Message_Block自己管理就可以了。 只是
ACE_Message_Block *mb = new ACE_Message_Block(n,ACE_Message_Block::MB_DATA,0,data);
这种做法不是很好,有画蛇添足之嫌。
ACE_Message_Block,本身可以替代Array,link ,
ACE_Message_Queeu 是Double_link
如果希望用cache,可以看看ACE_CACHED_Alloc在ACE_Message_Block 当中的应用 ACE_Message_Block *mb = new ACE_Message_Block(n,ACE_Message_Block::MB_DATA,0,data);
当然回泄漏拉,ACE_Message_Block只是保存了data指针...直接像你说的
ACE_Message_Block *mb = new ACE_Message_Block(n);
recv_n(mb->wr_ptr(),n);这样用就可以; ACE_Message_Block (size_t size,
ACE_Message_Type type = MB_DATA,
ACE_Message_Block *cont = 0,
const char *data = 0,
ACE_Allocator *allocator_strategy = 0,
ACE_Lock *locking_strategy = 0,
unsigned long priority = ACE_DEFAULT_MESSAGE_BLOCK_PRIORITY,
const ACE_Time_Value &execution_time = ACE_Time_Value::zero,
const ACE_Time_Value &deadline_time = ACE_Time_Value::max_time,
ACE_Allocator *data_block_allocator = 0,
ACE_Allocator *message_block_allocator = 0);
使用这个构造函数,只用第一个参数即可
然后调用release()释放
页:
[1]