ACE_Message_Block的release问题
一个ACE_Message_Block指针,我再调用它的release方法时,如何判断它的最后一次release是否已经被调用过了?例如:
for (ACE_Message_Block *h_blk; getq (h_blk) != -1; )
{
this->Function(h_blk);
if (h_blk)
{
h_blk->release();
}
}
在我调用h_blk->release();时,我希望知道h_blk得最后一次release是否已经被调用了,否则,调用release会出错。 确保自己每次release后把指针置为NULL
下次release做判断,if (h_blk == 0)再release
或者用static的ACE_Message_Block::release(h_blk),它帮你在内部进行了判断。
ACE_Message_Block::release(h_blk),
我的源码是在基类中供别人用的,所以我无法保证“每次release后把指针置为NULL ”。我看了一下ACE_Message_Block::release(h_blk)的源码,
ACE_Message_Block * ACE_Message_Block::release (ACE_Message_Block *mb)
{
ACE_TRACE ("ACE_Message_Block::release");
if (mb != 0)
return mb->release ();
else
return 0;
}
也是根据判断mb是否为空处理的。
但是像如下调用,还是会出问题:
for (ACE_Message_Block *h_blk; getq (h_blk) != -1; )
{
this->Function(h_blk);
if (h_blk)
{
h_blk->release();
}
}
void Function(ACE_Message_Block *h_blk h_blk)
{
h_blk->release();
}
真希望ACE_Message_Block能提供判断是否已经被release的方法。 这是不可能的。就像用普通的c++类一样,没任何办法判断是否一个指针已经被delete过。
给别人用的类,告诉他用法就可以了,他不这样用出问题就自己负责。
页:
[1]