生命周期检查

为了帮助开发者发现一些简单的错误,当节点状态结构和容器被销毁时,fbl:: 容器会运行多项检查。它们使用 ZX_DEBUG_ASSERT 实现,因此仅在启用调试断言时存在。

首先,如果节点状态结构位于容器内,则销毁该结构是非法的。这样做会被视为错误,并会触发断言。请始终确保不允许对象仍然位于容器中。使用代管式指针跟踪对象生命周期时,这通常很容易实现,因为容器中的对象需要获得对容器的至少一个对象引用的所有权,因此对象在离开容器并且可以最终引用之前无法销毁。

其次,当包含非受管指针的容器中仍存在对象时,销毁该容器是违法的。托管指针容器会在销毁时自动对其持有的托管引用执行 clear(),但非托管指针容器不会执行相同的操作。如果在销毁时容器中仍存在非托管指针,则这可能是一个错误,并且内存可能已泄露。因此,允许销毁包含非受管指针的非空容器将触发断言。