blob: 31f42e293c1d30b0d18af33661eb85aebceb13f5 [file] [log] [blame] [view]
# Lifecycle checks
To assist developers in catching some simple mistakes, there are a couple of
checks which are run by `fbl::` containers when node state structure and
containers are destroyed. They are implemented using `ZX_DEBUG_ASSERT` and are
therefor only present when debug asserts are enabled.
First, it is illegal for a node state structure to be destroyed while it exists
in a container. Doing so is considered to be an error and will trigger an
assert. Always make sure that objects are not allowed to be destroyed while
still in a container. This is usually fairly easy to arrange when using managed
pointers to track object lifecycle as objects in a container will need to have
given ownership of at least one object reference to the container, and so the
object cannot destruct until it leaves the container and can have its final
reference go away.
Second, it is illegal for a container of unmanaged pointers to be destroyed
while there are still objects in it. Containers of managed pointers will
automatically `clear()` themselves upon destruction dropping the managed
references that they hold, but containers of unmanaged pointers will not do the
same. If there are still unmanaged pointers in the container when it is
destroyed, it is likely that this was an error and that memory may have been
leaked. Therefore, allowing a non-empty container of unmanaged pointers to be
destroyed will trigger an assert.