C++0x lets you specify certain functions as defaulted:
struct A {
A() = default; // default ctor
A(A const&) = default; // copy ctor
A(A&&) = default; // move ctor
A(Other); // other ctor
~A() = default; // dtor
A& operator=(A const&) = default; // copy assignment
A& operator=(A&&) = default; // move assignment
};
The implementation of these functions is the same as if the compiler generated them, something that normally happens under most circumstances when you don't declare your own.
A default ctor is not generated if you declare any ctor (any of the others above), so you might need to default it to "bring it back."
However, unless a base or data member precludes them, a class always has a copy and move ctor—and if they are precluded, the default implementation won't work. A class always has a dtor.
Why would you need to explicitly default a copy ctor, move ctor, or destructor? Wouldn't the implicitly generated implementations do the same thing, anyway?