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

Reply via email to