title: Why must I declare copy & move constructors when declaring destructors?
body: <p>I have a <code>NonCopyable</code> class and an <code>Application</code> class derived from <code>NonCopyable</code>:</p>
  <pre><code>class NonCopyable
  {
  public:
      NonCopyable() = default;
      virtual ~NonCopyable() = default;
      NonCopyable(NonCopyable const&amp;) = delete;
      NonCopyable&amp; operator =(NonCopyable const&amp;) = delete;
      NonCopyable(NonCopyable&amp;&amp;) = delete;
      NonCopyable&amp; operator=(NonCopyable&amp;&amp;) = delete;
  };
  
  class Application : public NonCopyable
  {
  public:
      ~Application() { /* ...delete stuff... */ }
  };
  </code></pre>
  <p>As you see, I don't need to redeclare deleted move constructors or assignment operators as I've declared them in the base class. But why does Resharper suggest me to declare other special member functions? It said:</p>
  <blockquote>
  <p>Class <code>Application</code> defines a non-default destructor but does not define a copy constructor, a copy assignment operator, a move constructor or a move assignment operator [hicpp-special-member-functions].</p>
  <p>There're also [cppcoreguidelines-special-member-functions] reminders with the same message.</p>
  </blockquote>
  <p>The current workaround is to explicitly write all of them to make the warning go away:</p>
  <pre><code>class Application : public NonCopyable
  {
  public:
      ~Application() { /* ...delete stuff... */ }
      Application(Application const&amp;) = delete;
      Application&amp; operator =(Application const&amp;) = delete;
      Application(Application&amp;&amp;) = delete;
      Application&amp; operator=(Application&amp;&amp;) = delete;
  };
  </code></pre>