Simen kjaeraas wrote:
Justin Johansson <[email protected]> wrote:
Specifically, I wish to have class which has a member variable which
cannot be changed (and is guaranteed not to change) and this member
variable happens to be a reference type (i.e. it's a pointer in C++
parlance) and, further more, the instance of the class which that
variable refers to is to be deep immutable.
For instance, with
class Foo
{
}
class Bar
{
Foo foo;
}
consider instances of Foo to be in ROM and instances of Bar to be in
RAM and once a Bar instance is constructed, the member variable foo
itself is not allowed to be modified.
What you want is
class Bar
{
immutable Foo foo;
}
Now, I believe there are some problems constructing immutable objects, for
which the assumeUnique template in std.contracts is created.
Thanks for that Simen.
Thinking about this a bit more, there are four possibilities as
indicated in the following table :-
Variable foo is modifiable | Data referred to by foo is modifiable
---------------------------+--------------------------------------
No | No
No | Yes
Yes | No
Yes | Yes
---------------------------+--------------------------------------
What combination of immutable and const storage classes make for the
implementation of these four possibilities?