title: unique_ptr assignment and copy constructor clarification
body: <p>I would like to ensure the code I have (which does work) is correct to the specifications to c++. As in I want to make sure that all though it does run fine that the code meets c++ standards and specifications. Not entirely sure if this should rather be in a code review forum. If so please direct me there and I will move this post over to the forum.</p>
  
  <p>Engine.h</p>
  
  <pre><code>class Engine final {
  public:
      void run();
      void startup();
      Logger&amp; getLogger() const;
  
      Engine() = default;
      ~Engine() = default;
      Engine(Engine&amp;&amp; engine) = delete;
      Engine(const Engine&amp; engine) = delete;
      Engine&amp; operator=(Engine&amp;&amp; engine) = delete;
      Engine&amp; operator=(const Engine&amp; engine) = delete;
  
      void registerWindow(Window&amp;&amp; window);
      void registerWindow(Window&amp; window);
  private:
      std::unique_ptr&lt;Logger&gt; m_logger;
      std::unique_ptr&lt;Window&gt; m_main_window;
  };
  </code></pre>
  
  <p>Engine.cpp</p>
  
  <pre><code>void Engine::registerWindow(Window &amp;&amp;window) {
      m_main_window = std::move(std::unique_ptr&lt;Window&gt;(&amp;window)); // not confident that this is technically correct.
  }
  
  void Engine::registerWindow(Window &amp;window) {
      m_main_window = std::move(std::unique_ptr&lt;Window&gt;(&amp;window)); // not confident that this is technically correct.
  }
  </code></pre>
  
  <p>Window.h</p>
  
  <pre><code>class Window {
  public:
      Window(std::string title, int32_t width, int32_t height);
      ~Window() = default;
      Window(const Window&amp; window) = delete;
      Window(Window&amp;&amp; window) noexcept ;
      Window&amp; operator=(const Window&amp; window) = delete;
      Window&amp; operator=(Window&amp;&amp; window) noexcept ;
      void make_current() const;
      GLFWwindow* window() const;
  private:
      std::unique_ptr&lt;GLFWwindow, GLFWdeleter&gt; m_window;
  };
  </code></pre>
  
  <p>Window.cpp</p>
  
  <pre><code>Window::Window(Window &amp;&amp;window) noexcept
      : m_window(std::move(window.m_window))
  {
  }
  
  Window &amp;Window::operator=(Window &amp;&amp;window) noexcept {
      if (this == &amp;window)
          return *this;
      m_window = std::move(m_window);
      return *this;
  }
  </code></pre>
  
  <p>main.cpp</p>
  
  <pre><code>Window window("Hello World!", 640, 480);
  window.make_current();
  g_engine.registerWindow(window);
  </code></pre>