Proposal : allocations made easier with non nullable types.

Denis Koroskin 2korden at gmail.com
Tue Feb 10 06:53:07 PST 2009


On Tue, 10 Feb 2009 17:40:36 +0300, Andrei Alexandrescu  
<SeeWebsiteForEmail at erdani.org> wrote:

> Denis Koroskin wrote:
>> On Tue, 10 Feb 2009 17:11:06 +0300, Andrei Alexandrescu  
>> <SeeWebsiteForEmail at erdani.org> wrote:
>>
>>> Nick Sabalausky wrote:
>>>> "Daniel Keep" <daniel.keep.lists at gmail.com> wrote in message  
>>>> news:gmpd71$8uj$1 at digitalmars.com...
>>>>> Alex Burton wrote:
>>>>>> I think it makes no sense to have nullable pointers in a high level  
>>>>>> language like D.
>>>>> Oh, and how do you intend to make linked lists?  Or trees?  Or any
>>>>> non-trivial data structure?
>>>>>
>>>>  Null Object Pattern:
>>>> --------------
>>>> class LinkedListNode(T)
>>>> {
>>>>     LinkedListNode!(T) next;
>>>>      private static LinkedListNode!(T) _end;
>>>>     static LinkedListNode!(T) end() {
>>>>         return _end;
>>>>     }
>>>>     static this() {
>>>>          _end = new LinkedListNode!(T);
>>>>     }
>>>> }
>>>> --------------
>>>
>>>
>>> What is "next" for the _end node?
>>>
>>> Andrei
>>  Perhaps, 'this' (i.e. itself).
>
> Then there's going to be quite a few infinite loops out there...
>
> Andrei

No, you just need to have a private ctor:

class LinkedListNode(T)
{
     private enum Foo {
        Bar,
     }

     private this(Foo foo) // not accessible outside of the module
     {
         _next = this;
     }

     static this()
     {
         _end = new LinkedListNode!(T)(Foo.Bar);
     }

     private LinkedListNode _next;
}



More information about the Digitalmars-d mailing list