3

次のコードで参照ではなく所有権を渡すことができるのはなぜですか? std::unique_ptr< car > pcar( new toyota() );を使用すると参照を渡すことができることはわかっていますが、これが所有権の譲渡に適用されないのはなぜですか?

#include <memory>

class car{};

class toyota : public car{};

void someProcess( std::unique_ptr< car > vehicle )
{
    //Ownership passed.
}

void otherProcess( std::unique_ptr< car > const & vehicle )
{
    //Reference passed.
}

int main( int argc, char ** argv )
{
    std::unique_ptr< toyota > pcar( new toyota() );

    someProcess( std::move( pcar ) ); //Allowed to pass through car interface.

    pcar.reset( new toyota() );

    otherProcess( pcar ); //Compiler error, can't pass reference even when car interface is implemented.

    return 0;
}
4

1 に答える 1