In other words, each component ended up storing its own copy of the device object, each containing a pointer to the underlying vulkan device. This lead to the underlying vulkan device being destroyed multiple times, once for each component that was destroyed. To avoid mistakes like this, consider the rule of three/five and disable copy operations for polymorphic classes and other classes that are not meant to be copied.