class instance construction
Simen kjaeraas
simen.kjaras at gmail.com
Thu Nov 11 01:59:33 PST 2010
spir <denis.spir at gmail.com> wrote:
> First, what is the actual point of "new"?
Mostly, it's a remnant from C++.
> I find this keyword rather helpful in that it reminds me the element is
> referenced/heap-allocated/GC'ed. But is there any ambiguity on the
> language's side? We cannot construct a class instance in any other way,
> AFAIK, and "calling" a class can hardly have any other sense. Maybe
> classes' opCall could be set to the creation routine (whatever new
> calls); then we would get a single object-creation syntax.
Indeed it could. I believe Andrei Alexandrescu has discussed in favor of
such a change in the past.
> Still, an other case when "new" annoys me is method chaining, because it
> makes syntax heavier and less readable:
> c = (new C(p)).do(x);
> versus:
> c = C(p).do(x);
> Or, maybe, the parser could be clever enough to correctly decode:
> c = new C(p).do(x);
One would think it possible to stop searching right upon first finding a
function call parentheses (as opposed to a template parentheses). This is
complicated by the allowance of the syntax 'new C;'.
> Second, could there be a default constructor for classes, like for
> structs? Namely, one that sets declared fields:
> class C {int i;}
> ...
> auto c = new C(1);
There could. :p
As for whether there should, I'm not sure. I would say such a
constructor should disappear, should the class designer add other
constructors. That, coupled with classes usually being more complex than
that (mine are, at least), this seems like a feature that would have
little actual air-time.
> This is one great advantage of static languages, that the compiler knows
> more thank to declarations. Isn't it sensible to use this knowledge when
> helpful? I simply find the following stupid (I mean it's job for a
> machine, not for a programmer):
> class C {
> int i;
> this (int i) {this.i = i;}
> }
> As we already enjoy this feature for structs...
The syntax
this( int this.i ) {}
has been suggested for automatic initialization of fields. I like this
suggestion, but it is unlikely to find its way into the language any
time soon.
--
Simen
More information about the Digitalmars-d
mailing list