隨着
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 –