Copy-and-Move Concept Using Smart Pointer
unique_ptr is fine here. It's used where you would have used a plain pointer before.

But don't use naked new — use make_unique.  Oh, and I think a unique_ptr of array types was not in C++11 but needs C++14.

Don’t use (void) for () in parameter lists!  That was never proper, even in c++98. (it was supported to allow compatibility with C headers, but in Bjarne’s own words it’s “an abomination”.

Don’t write an empty destructor.  Use =default to emphasize that it exists, or just leave it off completely.

Why have a private _swap static function instead of a non-member overload of swap that anyone can use?

Another important new feature you have not embraced yet is the range for loop.  Use that instead of the lagacy for loops you have that go over the whole array.