| # 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. |
| |