首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

ACE_Message_Block跟ACE_Message_Queue问答

2012-09-24 
ACE_Message_Block和ACE_Message_Queue问答1、ACE_Message_Block::release (void)这个函数有返回吗?返回什

ACE_Message_Block和ACE_Message_Queue问答
1、ACE_Message_Block::release (void)这个函数有返回值吗?返回什么?

这个函数的确有返回值,返回类型为ACE_Message_Block *,不过在实现的时候恒返回NULL指针。

这个函数和析构函数有什么区别?多次调用安全吗?

析构函数无论是变量退栈还是由delete释放堆上分配对象,都会被调用。这个函数只适用于堆上分配的对象。调用release会使对象的引用计数减1,如果对象引用计数降为0,则删除对象,释放空间。release函数与使用delete函数的另一个重要区别是,release会释放消息块链上的所有Message_Block,如果使用delete只会删除当前的Message_Block,链上其它的消息块需要用户手动删除。

        ACE_Message_Block mb (100);        mb.wr_ptr (80);        mb.rd_ptr (60);        mb.size (90); // 重新设置当前数据块大小        cout << mb.length () << endl;    // 20        cout << mb.size () << endl;      // 90        cout << mb.capacity () << endl;  // 100

5、ACE_Message_Block::length (size_t)和ACE_Message_Block::size(size_t)这两个函数有什么区别?

lenth(size_t)用于设置未读消息的大小。这个函数会改变wr_ptr指针的位置,但不改变rd_ptr指针的位置。这个函数和wr_ptr (size_t)函数一样,未作内存越界检查,只是单纯改变了wr_ptr计数。size(size_t)函数可以改变消息块的当前数据块大小。如果参数指定的值小于等于capacity ()函数的返回值,则无需重新分配内存,只是改变size计数,如果size (sizt_t)参数指定的值大于capacity ()函数返回的数据块最大大小,则重新分配内存。







热点排行