c++ - Moving resources out of a generic class -
in context 1 follows :
template <class t> struct mystruct { t resource; decltype(auto) getresource() { return std::move(resource); } }; is getresource method doing expect do, i.e. move resource member out of class ? want use in cases mystruct won't used more , it's ok "steal" memory it.
with
template <class t> struct mystruct { t resource; decltype(auto) getresource() { return std::move(resource); } }; decltype(auto) t&&. t&& doesn't steal resource, (but allows stolen implicitly).
an alternative be
template <class t> struct mystruct { t resource; t takeresource() { return std::move(resource); } }; here, once takeresource called, resource has been transferred.
so example
mystruct<std::unique_ptr<int>> foo; foo.resource = std::make_unique<int>(42); *foo.get_resource() = 51; // no transfer ownership, reference *foo.get_resource() = 69; // still works. but
*foo.get_resource() = 51; // transfer ownership, , resource released here *foo.get_resource() = 69; // dereferencing nullptr -> ub.
Comments
Post a Comment