D's equivalent to C++'s std::move?
Ola Fosheim Grøstad via Digitalmars-d
digitalmars-d at puremagic.com
Thu Feb 11 05:14:28 PST 2016
On Thursday, 11 February 2016 at 01:45:32 UTC, Matt Elkins wrote:
> True, but with unique_ptr the max count is enforced by the
> compiler and can only be subverted by a programmer explicitly
> choosing to do so -- if that is possible with normal reference
> counting, I don't know of a way.
You "subvert" both unique_ptr and shared_ptr by taking the
reference of the object and using it directly... Like a borrowed
reference in Rust, except it is unchecked (by the compiler).
> Moreover, there is no heap allocation required which may or may
> not matter for a given use case. Of course there are ways to
> avoid or mitigate heap allocations for reference-counted
> pointers, but the point is that unique_ptr has the next best
> thing to no overhead at all, which allows it to be used in a
> broader range of contexts.
Yes, I agree, I don't think reference counting is all that
important. Although I tend to favour embedding objects rather
than using unique_ptr... C++ supports it, but in a rather clunky
way. I'd like to see a language that does that really well
(sensible initialization tracking of embedded or global objects,
so that you can safely delay initialization without resorting to
using pointers).
I never really use shared_ptr, but it is quite rich. AFAIK you
can swap one pointer for another, you can swap the underlying
object without touching the pointers, you can use weak_ptr which
checks the presence of the object.
I think shared_ptr is a good thing to have available, but you
generally don't have to resort to using it. With a properly
structured program you can get a long way with just unique_ptr
and your own tailored made structs.
More information about the Digitalmars-d
mailing list