On 23.10.2011 7:25, Sean Silva wrote:
== Quote from Jonathan M Davis (jmdavisp...@gmx.com)'s article
On Sunday, October 23, 2011 00:01:42 Sean Silva wrote:
They're all supposed to be reference types.
What prompted the decision for that? Doesn't that incur an extra heap
allocation for the
containers, and an extra level of indirection? I mean, with value-semantics
like STL
containers, you can use it like a value, e.g. as a local in a function, and
have no overhead,
AFAIK using e.g. local vector<T> only a small bunch of info is stored on
stack (ptr, length, capacity, whatever else). It still allocates it's
elements on heap. Plus there are ways to place class instance on stack
or anywhere else (e. g. some scratch memory page) if you really need to,
look for emplace in phobos.
but if you want to wrap a class around it and have it by reference, then you
can, and it is no
less efficient than if the containers were written that way. But if the
containers are already
by reference, you can't return them to having value semantics without adding
even more
indirection and inefficiency.
Less efficient is a moot point.
When you do iteration and other stuff you'd use range, like you'd use
iterators in c++. Range gets stack/register allocated pointers directly
to data (or close to it, that depends on container) so the only extra
cost in reference type compared to value is the first indirect access to
construct range and it's negligible.
--
Dmitry Olshansky