Ign*_*ant 5 c++ unique-ptr c++11
我有以下代码:
class Thing
{};
void fnc(Thing** out)
{
*out = new Thing();
};
Run Code Online (Sandbox Code Playgroud)
其中fnc返回Thingvia输出参数的新实例.通常我会按如下方式使用它:
int main()
{
Thing* thing;
fnc(&thing);
}
Run Code Online (Sandbox Code Playgroud)
我可以将返回的对象放入其中std::unique_ptr吗?
int main()
{
std::unique_ptr<Thing> uniqueThing;
fnc(???);
}
Run Code Online (Sandbox Code Playgroud)
要扩展代码示例,它(即按指针传递)将是
void fnc(std::unique_ptr<Thing>* out)
{
out->reset(new Thing());
};
int main()
{
std::unique_ptr<Thing> uniqueThing;
fnc(&uniqueThing);
}
Run Code Online (Sandbox Code Playgroud)
或使用传递引用:
void fnc(std::unique_ptr<Thing>& out)
{
out.reset(new Thing());
};
int main()
{
std::unique_ptr<Thing> uniqueThing;
fnc(uniqueThing);
}
Run Code Online (Sandbox Code Playgroud)
但我觉得通过返回值返回指针会更清楚:
std::unique_ptr<Thing> fnc()
{
return std::unique_ptr<Thing>(new Thing);
// or
// return std::make_unique<Thing>();
};
int main()
{
auto uniqueThing = fnc();
}
Run Code Online (Sandbox Code Playgroud)
您应该将原始指针存储在 中,unique_ptr以便unique_ptr取得所有权:
Thing* thing;
fnc(&thing);
std::unique_ptr<Thing> thing_unique (thing);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
859 次 |
| 最近记录: |