我有这个示例代码:
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;?
我不能在这里使用 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)