C++ 如何使用条件表达式返回对象指针?
根据25:40C++ 如何使用条件表达式返回对象指针?,c++,memory,smart-pointers,return-value-optimization,C++,Memory,Smart Pointers,Return Value Optimization,根据25:40 class Foo应以两种方式返回: 如果 if(条件) 返回foo1 其他的 返回foo2; 带条件表达式 返回条件?食物(foo1):std::move(foo2); 如果Foo是一个唯一的\u ptr,我想检查Foo是否不是null ptr,然后返回Foo,如果它是null ptr返回null ptr。让我们暂时忘记有人可能想要删除该指针 哪条路合适 Foo*getFoo() { //获取,因为foo是唯一的ptr 返回foo?foo.get():nullptr
class Foo
应以两种方式返回:
- 如果
if(条件)
返回foo1
其他的
返回foo2;
- 带条件表达式
返回条件?食物(foo1):std::move(foo2);
如果Foo
是一个唯一的\u ptr
,我想检查Foo
是否不是null ptr,然后返回Foo
,如果它是null ptr返回null ptr
。让我们暂时忘记有人可能想要删除该指针
哪条路合适
Foo*getFoo()
{
//获取,因为foo是唯一的ptr
返回foo?foo.get():nullptr;
}
Foo*getFoo()
{
返回foo?std::move(foo.get()):nullptr;
}
您不需要任何类型的分支。你可以用
Foo* getFoo()
{
return foo.get();
}
这是因为如果
foo
持有nullptr
,则将返回nullptr
,您不需要任何类型的分支。你可以用
Foo* getFoo()
{
return foo.get();
}
这是因为如果
foo
持有nullptr则返回nullptr
,如果foo
不拥有对象,foo.get()
返回nullptr
<代码>返回foo?get():nullptr代码>因此没有任何意义,因为您可以简单地编写return foo.get()请注意,std::move(foo.get())
也没有任何意义,因为foo.get()
按值返回指针。您只是从右值生成右值。此外,复制和移动基本类型(如指针)的内容具有相同的效果(不涉及复制/移动构造函数/赋值运算符)。是的,这是有意义的。谢谢。如果foo
不拥有对象,foo.get()
返回nullptr
<代码>返回foo?get():nullptr代码>因此没有任何意义,因为您可以简单地编写return foo.get()请注意,std::move(foo.get())
也没有任何意义,因为foo.get()
按值返回指针。您只是从右值生成右值。此外,复制和移动基本类型(如指针)的内容具有相同的效果(不涉及复制/移动构造函数/赋值运算符)。是的,这是有意义的。谢谢你。@BrodaJarek3同样的事情。如果它是nullptr
,您可以直接返回它;否则返回x
用于整数,那么为什么要用于指针呢?视频是关于返回两个不同对象中的一个,而不是返回一个可能具有不同值的对象。@BrodaJarek3相同的东西。如果它是nullptr
,您可以直接返回它;否则返回x
用于整数,那么为什么要用于指针呢?视频是关于返回两个不同对象中的一个,而不是返回一个可能具有不同值的对象。