On Tue, 02 Apr 2013 00:12:37 -0400, Luís Marques <[email protected]>
wrote:
On Tuesday, 2 April 2013 at 03:36:04 UTC, Steven Schveighoffer wrote:
Plus it would make pointers to indexed types inconsistent with all
pointers to types that don't define indexing.
Yeah, of course you're right...
Taking a step back, I think the problem here is that I wanted to have
multiple references to the contents of an associative array. With a
regular array, while you can't *store* a reference to the array "header"
(ptr, length) without using pointers, you can have another array
pointing to the same content. I guess you can't do something like that
with an associative array, right? (mm... that kinda breaks the ideia of
an AA as a more general array)
An AA is a pImpl, meaning a pointer to implementation. A simple copy is
an alias.
HOWEVER, there is one horrible caveat. You must have assigned an element
at least once in order to alias:
int[int] aa1; // pImpl initialized to null
int[int] aa2; // pImpl initialized to null
aa2 = aa1; // just assigns null to aa2
aa1[1] = 1; // allocates and initializes
aa2[1] = 2; // allocates and initializes separate instance
assert(aa1[1] == 1 && aa2[1] == 2);
aa2 = aa1; // NOW they are aliased
assert(aa2[1] == 1);
aa2[1] = 2;
assert(aa1[1] == 2);
-Steve