clear()
Max Samukha
spambox at d-coding.com
Sat Oct 10 02:08:01 PDT 2009
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'.
More information about the Digitalmars-d
mailing list