The following code compiles:
#include
#include
#include
using namespace std;
class container
{
public:
conta
The code gets compiled because buildShip()
would use the move constructor automatically generated by the compiler when returning tmp
. Adding user-declared destructor prevents the compiler from auto-generating one. E.g., see this or this questions. And the compiler-generated copy constructor can not be used because of the member up
which is std::unique_ptr
. And copy constuctor of unique_ptr
is explicitly deleted.
So this will compile, because the compiler is explicitly asked to generate the move constructor:
class Ship
{
public:
Ship(){}
Ship(Ship&&) = default;
~Ship(){}
std::unique_ptr up;
};