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

Popular posts from this blog

java - Run spring boot application error: Cannot instantiate interface org.springframework.context.ApplicationListener -

python - pip wont install .WHL files -

Excel VBA "Microsoft Windows Common Controls 6.0 (SP6)" Location Changes -