如何将原始指针转换为 unique_ptr?

lor*_*213 1 c++ pointers stl

我有这个示例代码:

std::unique_ptr<Base> some_function() {
    //I cannot use unique ptr here becuase it will get freed when the function return i guess
    Derived* derived = new Derived;
    return static_cast<std::unique_ptr<Base>>(derived);
}
Run Code Online (Sandbox Code Playgroud)

使用static_cast这里是一个好的解决方案吗?还有其他选择返回吗unique_ptr

return std::unique_ptr<Command>(derived);
Run Code Online (Sandbox Code Playgroud)

如果我像这样返回,由于 ptr 是任意的,它会在返回表达式的末尾被释放吗?

如果我不想在 中使用原始指针,解决方法是什么Derived* derived = new Derived;

Ted*_*gmo 9

我不能在这里使用 unique ptr,因为我猜当函数返回时它会被释放

您只需返回它即可,存储在智能指针中的原始指针的所有权将从您的本地变量转移到std::unique_ptr<Base>.

std::unique_ptr<Base> some_function() {
    auto derived = std::make_unique<Derived>();

    // use derived in here ...

    return derived; // and return it by value
}
Run Code Online (Sandbox Code Playgroud)

演示