diff --git a/libvisual/tools/lv-tool/display/display.cpp b/libvisual/tools/lv-tool/display/display.cpp index cef30f36a..d413f4061 100644 --- a/libvisual/tools/lv-tool/display/display.cpp +++ b/libvisual/tools/lv-tool/display/display.cpp @@ -25,6 +25,7 @@ #include "display.hpp" #include "display_driver_factory.hpp" #include +#include #include #include @@ -34,8 +35,8 @@ class Display::Impl std::unique_ptr driver; - Impl () - : driver (nullptr) + Impl (std::unique_ptr driver_) + : driver {std::move (driver_)} {} ~Impl () @@ -43,10 +44,8 @@ class Display::Impl }; Display::Display (std::string const& driver_name) - : m_impl (new Impl) + : m_impl {new Impl {DisplayDriverFactory::instance().make (driver_name, *this)}} { - m_impl->driver.reset (DisplayDriverFactory::instance().make (driver_name, *this)); - if (!m_impl->driver) { throw std::runtime_error ("Failed to load display driver '" + driver_name + "'. Valid driver set? (\"--driver\" parameter)"); } diff --git a/libvisual/tools/lv-tool/display/display_driver_factory.cpp b/libvisual/tools/lv-tool/display/display_driver_factory.cpp index 0a5364e70..ce3794cb5 100644 --- a/libvisual/tools/lv-tool/display/display_driver_factory.cpp +++ b/libvisual/tools/lv-tool/display/display_driver_factory.cpp @@ -62,7 +62,7 @@ void DisplayDriverFactory::add_driver (std::string const& name, Creator const& c m_impl->creators[name] = creator; } -DisplayDriver* DisplayDriverFactory::make (std::string const& name, Display& display) +std::unique_ptr DisplayDriverFactory::make (std::string const& name, Display& display) { auto entry = m_impl->creators.find (name); @@ -70,7 +70,7 @@ DisplayDriver* DisplayDriverFactory::make (std::string const& name, Display& dis return nullptr; } - return entry->second (display); + return std::unique_ptr {entry->second (display)}; } bool DisplayDriverFactory::has_driver (std::string const& name) const diff --git a/libvisual/tools/lv-tool/display/display_driver_factory.hpp b/libvisual/tools/lv-tool/display/display_driver_factory.hpp index 79d0d2e02..882156603 100644 --- a/libvisual/tools/lv-tool/display/display_driver_factory.hpp +++ b/libvisual/tools/lv-tool/display/display_driver_factory.hpp @@ -46,7 +46,7 @@ class DisplayDriverFactory return m_instance; } - DisplayDriver* make (std::string const& name, Display& display); + std::unique_ptr make (std::string const& name, Display& display); void add_driver (std::string const& name, Creator const& creator);