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::find 指定起始位置

std::ostream : 类不可访问 [C++]

带有 std::enable_if 和 std::decay 的 C++ 类构造函数模板

C++中std::transform的使用问题

C++11 std::vector 的模板类,构造函数中有参数

如何在包装头文件中包装 c++ std::shared_ptr 以便它可以从 c 中调用?

如何访问 std::shared_ptr 方法

使用宏测试C中的函数返回值

在带有 std::unique_ptr 的类赋值运算符中,

如何正确使用 std::shared_ptr 和 std::map

不存在从“std::string”到“const char *”的合适的转换函数 c++

重新分配当前为 std::unique_ptr 的 auto 类型变量

C++ std::vector 的高效插值

我怎样才能用指针函数返回unique_ptr?

使用 std::vector 和 shared_ptr 优化 C++ 代码

C++17 unique_ptr lambda 按值捕获是可以的,但不能按引用

如何将包含 std::unique_ptr 的 std::optional 结构传递给函数?

如何声明一个返回 std::list 或将 std::list 作为参数类型的 C++ 函数?

为什么我需要移动 `std::unique_ptr`

为什么 std::unique_ptr 没有优化而 std::variant 可以?

gcc 选项 std=gnu++17 与 std=c++17

为什么 std::unique_ptr 与赋值运算符不兼容?

错误:没有匹配的函数调用 'std::vector<std:

在 unique_ptr 向量中使用 push_back(std::move())

用 c 风格的函数优化小的 std::strings 通常毫无意义吗?

錯誤:使用已刪除的函數 std::unique_ptr

C++ - std::getline() 不返回任何内容

C++ std::string::at()

C++;将 std::array 作为函数参数传递

C++;将 std::array 随机访问迭代器作为函数参数传递