Go, D, and the GC
Shachar Shemesh via Digitalmars-d
digitalmars-d at puremagic.com
Mon Oct 5 02:33:26 PDT 2015
On 05/10/15 10:49, Dmitry Olshansky wrote:
>
> Yes and no, if your type is movable in C++ you have to have a T.init
> equivalent to leave something behind after move (oops!).
No, under C++ you can choose whether it makes sense for your type to be
movable or not. No oops at all.
C++ does not make any attempt to protect you from your own incompetence.
Within that assumption (which some people accept as reasonable and
others don't), C++ does the right thing.
>
> Now if the type is not movable it doesn't really burden much to have an
> invalid state and trigger an assert in dtor to make sure the type is
> properly initialized. Then:
>
> T a; // would trigger assert on dtor
> T a = T(...); // shouldn't
But how will you detect whether the type has been properly constructed
or not?
>
> If all states are valid and you still want to guarantee construction
> that gets tricky. For example for "seconds" struct if we allow negative
> seconds as in diff of time. (Though I'd just use long.min for the
> "wrong" flag in this case).
>
But that is a very strong aspect of the C++ paradigm. Saying "you can
engineer a type that is valid at any point it is in scope, enforced by
the compiler". In fact, it was such a fundamental part of the C++ design
that Strastrup had to change a long standing C constraint (variables are
only defined at the start of the scope) in order to support it. That
change, like many others, has found its way back into C99, so many
people today don't even realize it was ever there.
Shachar
More information about the Digitalmars-d
mailing list