C ++ std :: unique_ptr从函数返回并测试null

门德斯

我有一个函数需要返回一个指向class对象的指针myClass为此,我正在使用std::unique_ptr

如果函数成功,它将返回一个指向带有数据的对象的指针。如果失败,则应返回null

这是我的代码框架:

std::unique_ptr<myClass> getData()
{
   if (dataExists)
      ... create a new myClass object, populate and return it ...

   // No data found
   return std::unique_ptr<myClass> (null); // <--- Possible?
}

main

main()
{
   std::unique_ptr<myClass> returnedData;

   returnedData = getData();

   if (returnedData != null)  // <-- How to test for null?
   {
      cout << "No data returned." << endl;
      return 0;
   }

   // Process data
}

所以这是我的问题:

a)是否可以(使用返回对象nullstd::unique_ptr

b)如果可能,如何实施?

c)如果不可能,还有什么替代方法?

感谢您的帮助。

萨胡

以下任何一种都可以工作:

return std::unique_ptr<myClass>{};
return std::unique_ptr<myClass>(nullptr);

要测试返回的对象是否指向有效对象,只需使用:

if ( returnedData )
{
   // ...
}

请参阅http://en.cppreference.com/w/cpp/memory/unique_ptr/operator_bool

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

C ++ std :: unique_ptr存储在std :: map内部,使用删除的函数会形成不良

C ++ std :: unique_ptr在std :: map中

尝试返回由NULL构造的std :: unique_ptr

C ++ 11迭代器和返回的std :: unique_ptr的范围

C ++ 11:使用自定义Lambda Deleter返回std :: unique_ptr

如何在C ++ 11中返回包含自定义删除器的std :: unique_ptr?

C ++将删除的函数std :: unique_ptr与基类一起使用

C ++如何从采用构造函数参数的类中创建std :: unique_ptr

使用C ++ std :: unique_ptr <>或std :: shared_ptr <>来管理Objective-C对象

使用std :: move(nullptr)的unique_ptr的operator =的C ++错误

C ++ Qt std :: unique_ptr Qt版本在哪里?

C ++ 03中std :: unique_ptr的仿真

带有 STL 容器的 C++ std::unique_ptr

C ++-vector <>中的std :: unique_ptr为nullptr

返回对std :: unique_ptr的引用的原因

std :: unique_ptr constexpr构造函数

std :: unique_ptr构造函数的行为

错误C2248:'std :: unique_ptr <_Ty> :: unique_ptr':无法访问在类'std :: unique_ptr <_Ty>'中声明的私有成员

在std :: unordered_set <std :: unique_ptr>(C ++ 20)中找到指针T *

C++ 在 std::unique_ptr 上调用 std::move 而不复制

函数(通过std :: move)返回的unique_ptr什么时候超出范围

从工厂函数返回std :: unique_ptr <T>,创建纯虚拟接口的完全隐藏的实现

从函数返回的std :: unique_ptr中的抽象类不起作用

std :: unique_ptr析构函数构造函数顺序

C ++-返回const unique_ptr

如何允许 std::unique_ptr 访问类的私有析构函数或使用私有析构函数实现 C++ 工厂类?

移动unique_ptr后,std :: unique_ptr :: get返回的值是否有效?

没有std :: move的值如何返回unique_ptr?

铛,返回带有类型转换的std :: unique_ptr