clear()

Jacob Carlborg doob at me.com
Sat Oct 10 03:13:01 PDT 2009


On 10/10/09 12:06, Denis Koroskin wrote:
> On Sat, 10 Oct 2009 13:08:01 +0400, Max Samukha <spambox at d-coding.com>
> wrote:
>
>> On Fri, 09 Oct 2009 21:50:48 +0200, Yigal Chripun <yigal100 at gmail.com>
>> wrote:
>>
>>> On 09/10/2009 19:53, Max Samukha wrote:
>>>> On Fri, 09 Oct 2009 11:40:43 -0500, Andrei Alexandrescu
>>>> <SeeWebsiteForEmail at erdani.org> wrote:
>>>>
>>>>> I'm talking with Sean and Walter about taking the first step towards
>>>>> eliminating delete: defining function clear() that clears the state of
>>>>> an object. Let me know of what you think.
>>>>>
>>>>> One problem I encountered is that I can't distinguish between a
>>>>> default
>>>>> constructor that doesn't need to exist, and one that was disabled
>>>>> because of other constructors. Consider:
>>>>>
>>>>> class A {}
>>>>> class B { this(int) {} }
>>>>>
>>>>> You can evaluate "new A" but not "new B". So it's legit to create
>>>>> objects of type A all default-initialized. But the pointer to
>>>>> constructor stored in A.classinfo is null, same as B.
>>>>>
>>>>> Any ideas?
>>>>>
>>>>
>>>> The notion of default constructor is not quite clear.
>>>>
>>>> class A
>>>> {
>>>> this(int a = 22) {}
>>>> }
>>>>
>>>> Should A be considered as having a default constructor?
>>>>
>>>> class B
>>>> {
>>>> this(int) {}
>>>> }
>>>>
>>>> Should passing int.init to B's constructor be considered default
>>>> construction? If yes, we could recreate B using the init value. But
>>>> then:
>>>>
>>>> class C
>>>> {
>>>> this(int a) {}
>>>> this(int a, int b) {}
>>>> }
>>>>
>>>> Which constructor to call? The one with fewer parameters? What if
>>>> there are overloaded constructors with identical number of parameters?
>>>> Should we explicitly mark one of the constructors as default?
>>>
>>> I agree. classinfo.defaultConstructor should be replaced by an array of
>>> all the constructors. Only when the array is empty you assume the
>>> existence of the default compiler generated constructor.
>>
>> I'd prefer complete runtime information for all members.
>>
>> The problem is I do not understand what 'default constructor' and
>> 'default construction' means in D for classes that have explicit
>> constructors with parameters. How to automatically construct this cl
>> ass:
>>
>> class B
>> {
>> this(int a = 22) {}
>> }
>> ?
>>
>> For example, Object.factory will always return null for B, which is an
>> arbitrary limitation.
>>
>> class C
>> {
>> this(int a) {}
>> }
>>
>> For C, the "default constructor" should probably be generated like
>> this:
>>
>> void C_ctor(C c)
>> {
>> c.__ctor(int.init);
>> }
>> etc.
>>
>> Otherwise, I cannot see how one can reconstruct an instance of C in
>> 'clear'.
>
> obj.clear(42);
>
> Wait, uniform function call syntax doesn't work with classes! Oh, well...
>
> clear!(C)(obj, 42);

I've suggested to implement uniform function call syntax: 
http://d.puremagic.com/issues/show_bug.cgi?id=3382



More information about the Digitalmars-d mailing list