@@ -172,9 +172,8 @@ struct state_vulkan_sdl3 {
172172
173173 SDL_Window* window = nullptr ;
174174
175- // Use raw pointers because std::unique_ptr might not have standard layout
176- vkd::VulkanDisplay* vulkan = nullptr ;
177- WindowCallback* window_callback = nullptr ;
175+ std::unique_ptr<vkd::VulkanDisplay> vulkan;
176+ std::unique_ptr<WindowCallback> window_callback;
178177 FrameMappings frame_mappings;
179178
180179 std::atomic<bool > should_exit = false ;
@@ -861,7 +860,7 @@ void* display_vulkan_init(module* parent, const char* fmt, unsigned int flags) {
861860 log_msg (LOG_LEVEL_ERROR, MOD_NAME " Unable to create window : %s\n " , SDL_GetError ());
862861 return nullptr ;
863862 }
864- s->window_callback = new WindowCallback (s->window );
863+ s->window_callback = std::make_unique< WindowCallback> (s->window );
865864 if (!vulkan_sdl3_set_window_position (s.get (), &args)) {
866865 return nullptr ;
867866 }
@@ -882,7 +881,7 @@ void* display_vulkan_init(module* parent, const char* fmt, unsigned int flags) {
882881 std::cout << SDL_GetError () << std::endl;
883882 throw std::runtime_error (" SDL cannot create surface." );
884883 }
885- s->vulkan = new vkd::VulkanDisplay{} ;
884+ s->vulkan = std::make_unique< vkd::VulkanDisplay>() ;
886885 s->vulkan ->init (std::move (instance), vk::SurfaceKHR (surface),
887886 initial_frame_count, *s->window_callback ,
888887 args.gpu_idx , std::move (path_to_shaders),
@@ -906,11 +905,6 @@ void display_vulkan_done(void* state) {
906905 }
907906 catch (std::exception& e) { log_and_exit_uv (e); }
908907
909- delete s->vulkan ;
910- s->vulkan = nullptr ;
911- delete s->window_callback ;
912- s->window_callback = nullptr ;
913-
914908 if (s->window ) {
915909 SDL_DestroyWindow (s->window );
916910 s->window = nullptr ;
0 commit comments