从函数的结果中分配std :: shared_ptr的一个衬里是什么?

Car*_*bon -2 c++

有一个更惯用的方法来做到这一点:

Potato SpecialPotato();
std::shared_ptr<Potato> givePotato()
{
    std::shared_ptr<Potato> ret;
    *ret = SpecialPotato();
    return ret;
}
Run Code Online (Sandbox Code Playgroud)

Nat*_*ica 5

*ret = SpecialPotato();ret因为它是默认构造的,所以不会像空指针一样工作.如果你想返回一个带有返回值的std::shared_ptr<Potato>a Potato,SpecialPotato()你可以使用std::make_sharedlike

std::shared_ptr<Potato> givePotato()
{
    return std::make_shared<Potato>(SpecialPotato());
}
Run Code Online (Sandbox Code Playgroud)

这将动态分配a Potato,用return返回初始化SpecialPotato()然后返回shared_ptr.


请注意,如果SpecialPotato()应该返回从中派生的类型,则Potato无法返回Potato.这将切割对象,您将丢失对象的派生部分.将派生类型作为父类型返回时,需要使用类似指针/指针的类型

std::shared_ptr<Potato> SpecialPotato()
{
    return std::make_shared<SpecialPotatoType>(/* constructor parameters here */);
}   
Run Code Online (Sandbox Code Playgroud)