On Thursday, 11 February 2016 at 00:32:11 UTC, Matt Elkins wrote:

Maybe this is what you are referring to, but the primary use I get out of move semantics (in general, not language-specific) has little to do with performance-on-copy. It is for handling resources which logically aren't copyable, which have a unique owner at all times and which should be cleaned up as soon as unique owner falls out of scope. This situation occurs a lot for me, and RAII plus move semantics are pretty close to ideal for handling it. Yes, it can be approximated with reference counting, but reference counting has its own downsides.

This is my primary use case for move semantics too, in both C++ and D. Using noncopyable structs for this is perfect, because you can keep them on the stack and avoid heap allocation and indirection if you don't need to move them around a lot. If you do move them often enough that D's copy-and-clear semantics become a performance issue, just stick them in something like std.typecons.Unique or std::unique_ptr. Finally, if you need to have multiple owners/references, put them in a std.typecons.RefCounted or std::shared_ptr.

Best of all worlds.

Lars


Reply via email to