title: Proper usage of std::move
body: <p>The following code works:</p>
  
  <pre><code>class Handler {
  public:
      Application* application;
  
      bool handle(sf::Event&amp;);
  };
  
  class TestApp {
  public:
      TestApp();
  
      bool running;
      void run();
      void attach_handler(Handler*);
  
      std::forward_list&lt;std::unique_ptr&lt;Handler&gt;&gt; handlerFList;
  };
  
  TestApp::TestApp() {
  }
  
  void Application::run() {
      while (running) {
          sf::Event event;
          while (window-&gt;pollEvent(event)) {
              for (auto&amp; handler : handlerFList) {
                  if (handler-&gt;handle(event)) {
                      break;
                  }
              }
          }
      }
  }
  
  void Application::attach_handler(Handler* handler) {
      handlerFList.push_front(std::unique_ptr&lt;Handler&gt;(std::move(handler)));
      handler-&gt;application = this;
  }
  
  int main() {
      sqt::TestApp app;
  
      sqe::HandlerClose hc;
      app.attach_handler(&amp;hc);
  
      app.run();
      return 0;
  }
  </code></pre>
  
  <p>But this one does not:</p>
  
  <pre><code>class Handler {
  public:
      Application* application;
  
      bool handle(sf::Event&amp;);
  };
  
  class TestApp {
  public:
      TestApp();
  
      bool running;
      void run();
      void attach_handler(Handler*);
  
      std::forward_list&lt;std::unique_ptr&lt;Handler&gt;&gt; handlerFList;
  };
  
  TestApp::TestApp() {
      sqe::HandlerClose hc;
      attach_handler(&amp;hc);
  }
  
  void TestApp::run() {
      while (running) {
          sf::Event event;
          while (window-&gt;pollEvent(event)) {
              for (auto&amp; handler : handlerFList) {
                  if (handler-&gt;handle(event)) {           // SEGFAULTS
                      break;
                  }
              }
          }
      }
  }
  
  void TestApp::attach_handler(Handler* handler) {
      handlerFList.push_front(std::unique_ptr&lt;Handler&gt;(std::move(handler)));
      handler-&gt;application = this;
  }
  
  int main() {
      sqt::TestApp app;
  
      app.run();
      return 0;
  }
  </code></pre>
  
  <p>It segfaults where marked. I can't work out what I'm doing wrong. Isn't std::move supposed to move the base object? What it seems like is happening is that once TestApp's constructor finishes, the object is getting deleted. How can I fix this?</p>