基本上,我正在创建一个基类,该基类将用于存储为链表的类,这些类将按照返回布尔值的虚拟 update() 函数的指示进行遍历和删除。
我想知道这是否是最有效的情况(我特别喜欢它可以是单链表的事实):
class Traversable
{
public:
Traversable();
virtual ~Traversable();
void traverse(Traversable** prevNext);
virtual bool update()=0;
protected:
private:
Traversable* next;
};
void Traversable::traverse(Traversable** prevNext)
{
if (!update()) /// Virtual function that returns a death flag
{ /// Death
if (next)
{
Traversable* localNext = next;
delete this;
localNext->traverse(prevNext);
}
else
{
*prevNext = NULL;
delete this;
}
}
else
{ /// This node stays alive, for now
*prevNext = this;
if (next)
{
next->traverse(&next);
}
}
}
注意链表是 NULL 终止的。
我认为在调用下一个遍历函数之后小心地缺少对局部变量的赋值操作将确保使用尾调用来确保使用该函数。谁能发现我做错了什么,或者建议一种稍微不那么复杂的方法:p