根据 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();
}
这是有效的,因为如果foo
get
持有nullptr
,将返回nullptr
。