c++ - 如何使用条件表达式返回对象指针?

标签 c++ memory smart-pointers return-value-optimization

根据 https://www.youtube.com/watch?v=LFv7XwgsdLY&t=1620s 25:40

class Foo 应该以两种方式返回:

  • 如果
if(condition) 
   return foo1 
else 
    return foo2;
  • 带条件表达式
return condition ? food(foo1) : std::move(foo2);

如果 Foo 是一个 unique_ptr 并且我想检查 Foo 是否不是 nullptr 然后返回 foo如果它是一个 nullptr,则返回 nullptr。让我们暂时忘记有人可能想要删除该指针。

哪种方式合适?

Foo* getFoo()
{
    //get because foo is a unique ptr
    return foo ? foo.get() : nullptr;
}
Foo* getFoo()
{
    return foo ? std::move(foo.get()) : nullptr;
}

最佳答案

您不需要任何类型的分支。你可以直接使用

Foo* getFoo()
{
    return foo.get();
}

这是有效的,因为 get如果 foo 持有 nullptr,将返回 nullptr

关于c++ - 如何使用条件表达式返回对象指针?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58838172/

相关文章:

c++ - MPI 调用需要多少堆栈空间?

c++ - FANN 库的意外结果

c# - 从 C# 访问 Win32 C/C++ 结构成员

python - df.items() 和 df.iteritems() 之间的区别

c# - 有人可以向我解释为什么这不起作用吗?

java - 字符串/字节效率和内存行为

c++ - 学习c++11智能指针,它不会让我像指针一样使用隐式转换吗?

c++ - 为什么 sizeof 适用于返回类型

c++ - 句柄和智能指针一样吗?

c++ - unique_ptr 和前向声明 : the proper way to code a factory function