Prior to C++11, all of the special members functions were totally independent. If you declare or don’t declare any one of the default constructor, the copy constructor, the copy assignment operator, or the destructor, that has no effect whatsoever on the other three.

But when C++11 introduced the move constructor and move assignment operator, it tied them to each other, and to the copy operations and the destructor.

If you declare the move assignment operator, the copy constructor, the copy assignment operator, or the destructor, the move constructor will not be implicitly generated. Similarly, if you declare the move constructor, the copy constructor, the copy assignment operator, or the destructor, the move assignment operator will not be implicitly generated.

In summary:

If you define a destructor or any copy operations, you lose move operations.

Source.