gpt4 book ai didi

c++ - 如何通过接口(interface)传递 unique_ptr?

转载 作者:太空狗 更新时间:2023-10-29 21:24:12 24 4
gpt4 key购买 nike

我只是想知道为什么我能够在以下代码中传递所有权而不是引用?我知道使用 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;
}

最佳答案

pcar 不是 std::unique_ptr< car > .为了编译,一个临时的std::unique_ptr< car >需要创建以绑定(bind)到该参数。但是你不能创建一个临时的,因为没有接受左值 unique_ptr 的 unique_ptr 的(转换)构造函数。

基本上,如果编译,临时对象将被创建,获得指针的所有权,然后在函数返回时被销毁,因此 pcar 拥有的指针将被销毁,这不是很直观也不是期望的行为。

关于c++ - 如何通过接口(interface)传递 unique_ptr?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16780578/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com