Men*_*des 23 c++ unique-ptr c++11
我有一个函数需要返回一个指向类对象的指针myClass.为此我正在使用std::unique_ptr.
如果函数成功,它将返回一个指向带有数据的对象的指针.如果失败,它应该返回null.
这是我的代码skelepton:
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 ?
}
Run Code Online (Sandbox Code Playgroud)
上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
}
Run Code Online (Sandbox Code Playgroud)
所以这里是我的问题:
a)是否null可以使用std::unique_ptr?(返回一个对象或)?
b)如果可能,如何实施?
c)如果不可能,有哪些替代方案?
谢谢你的帮助.
R S*_*ahu 37
以下任何一种都应该有效:
return std::unique_ptr<myClass>{};
return std::unique_ptr<myClass>(nullptr);
Run Code Online (Sandbox Code Playgroud)
要测试返回的对象是否指向有效对象,只需使用:
if ( returnedData )
{
// ...
}
Run Code Online (Sandbox Code Playgroud)
见http://en.cppreference.com/w/cpp/memory/unique_ptr/operator_bool.
是的,这是可能的.默认构造unique_ptr是您想要的:
构造一个
std::unique_ptr什么都不拥有的东西.
// No data found
return std::unique_ptr<myClass>{};
Run Code Online (Sandbox Code Playgroud)
这相当于nullptr_t构造函数,所以这可能更清楚:
// No data found
return nullptr;
Run Code Online (Sandbox Code Playgroud)
对的,这是可能的。一个默认构造unique_ptr或一个构造自nullptr可以被认为是空的:
std::unique_ptr<MyClass> getData()
{
if (dataExists)
return std::make_unique<MyClass>();
return nullptr;
}
Run Code Online (Sandbox Code Playgroud)
要测试 null 要么比较要么nullptr利用转换为 bool:
int main()
{
std::unique_ptr<MyClass> returnedData = getData();
if (returnedData)
{
...
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
48051 次 |
| 最近记录: |