【发布时间】:2019-11-13 13:25:55
【问题描述】:
据https://www.youtube.com/watch?v=LFv7XwgsdLY&t=1620s25: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不拥有对象,foo.get()返回nullptr。return foo ? foo.get() : nullptr;因此没有任何意义,因为您可以简单地写成return foo.get();。 -
另外,请注意
std::move(foo.get())也没有任何意义,因为foo.get()按值返回一个指针。你只是从一个右值制作一个右值。此外,复制和移动基本类型(例如指针)的内容具有相同的效果(不涉及复制/移动构造函数/赋值运算符)。 -
是的,这是有道理的。谢谢。
标签: c++ memory smart-pointers return-value-optimization