Classes and @disable this()
Steven Schveighoffer via Digitalmars-d-learn
digitalmars-d-learn at puremagic.com
Mon Feb 9 12:25:14 PST 2015
On 2/9/15 3:15 PM, Jonathan M Davis via Digitalmars-d-learn wrote:
> On Monday, February 09, 2015 13:29:22 Steven Schveighoffer via Digitalmars-d-learn wrote:
>> On 2/8/15 2:57 PM, Jonathan M Davis via Digitalmars-d-learn wrote:
>>> On Sunday, February 08, 2015 17:51:09 bearophile via Digitalmars-d-learn wrote:
>>>> fra:
>>>>
>>>>> However making it a compiler error would be far, far better
>>>>
>>>> I think this can be filed in Bugzilla as diagnostic enhancement:
>>>>
>>>>
>>>> class Foo {
>>>> @disable this();
>>>> this(int i) {}
>>>> }
>>>> void main() {}
>>>
>>> The compiler should probably just give you an error telling you that
>>> disabling the default constructor on classes is illegal. And since no
>>> default constructor is automatically declared if you declare another
>>> constructor, there isn't even any point in disabling the default constructor
>>> (which is probably why no one has been complaining about this). @disable
>>> this() only makes sense on structs.
>>
>> Why? I think it's perfectly acceptable.
>>
>> What should be illegal is if you extend Foo and don't @disable this on
>> the derivative.
>
> Why would it we even allow it? What benefit is there? It's meaningless.
> @disable this(); is for disabling the init property on structs. Classes
> themselves have no init values - and their references have null as their
> init value.
>
> The default constructor already follows sensible rules where it's not
> generated if another constructor is declared, and derived classes have to
> call a base class constructor if the base class doesn't have a default
> constructor.
Well, if I do this:
class C {}
I can do this:
new C();
Mechanisms to disable this are kind of awkward. I can define this() as
private, but that doesn't help for intra-module calls.
static class C doesn't work.
It really is only useful in the case where you don't want to define a
constructor. Which probably means -- you don't want to use a class anyway ;)
But for completeness, it seems like I should be able to have the option
of disabling something the compiler does by default. Even if it's next
to useless.
-Steve
More information about the Digitalmars-d-learn
mailing list