随着
template <class T>
struct MyStruct
{
T resource;
decltype(auto) getResource()
{
return std::move(resource);
}
};
decltype(auto)
是T&&
。但T&&
本身并不会窃取资源,(但允许它被隐含地窃取)。
另一种方法是
template <class T>
struct MyStruct
{
T resource;
T takeResource()
{
return std::move(resource);
}
};
这里,一旦takeResource
被调用时,资源已经转移。
因此,例如
MyStruct<std::unique_ptr<int>> foo; foo.resource = std::make_unique<int>(42);
*foo.get_resource() = 51; // No transfer ownership, just get a reference
*foo.get_resource() = 69; // still works.
但
*foo.get_resource() = 51; // Transfer ownership, and resource will be released here
*foo.get_resource() = 69; // dereferencing nullptr -> UB.
如果你偷东西,你最好与一些更复杂的名称坚持 - 据我可以告诉通过看** **弄人通常不期望修改。 – ixSci
decltype(自动)是C++ 14 –