这是一个链表的节点类,其中重载了new和delete操作符,以提高用链表实现线性表的效率

//singly-linked list node with freelist support
template <class T>
class Freelink
{
    private:
        static Freelink<T> *freelist;
    public:
        T elem;
        Freelink *next;
        Freelink();
        Freelink(T &ielem, Freelink *inext = NULL);
        void *operator new(size_t);
        void operator delete(void *ptr);
};

template <class T>
Freelink<T> *Freelink<T>::freelist = NULL;

template <class T>
Freelink<T>::Freelink()
{
    next = NULL;
}

template <class T>
Freelink<T>::Freelink(T &eilem, Freelink *inext)
{
    elem = ielem;
    next = inext;
}

template <class T>
void *Freelink<T>::operator new(size_t)
{
    if(freelist == NULL)
        return ::new Freelink;
    Link<T> *temp = freelist;
    freelist = freelist->next;
    return temp;
}

template <class T>
void Freelink<T>::operator delete(void *ptr)
{
    (Freelink<T>*)ptr->next = freelist;
    freelist = (Freelink<T>*)ptr;
}


一.对void *operator new(size_t)中为什么要设形参size_t不明白,函数中并没有用到啊
二.对if(freelist == NULL)
        return ::new Freelink;
  不明白,如果freelist为空,就返回系统new创建的内存空间,那这样的话freelist还是为空啊,后面的语句怎么会实现呢!
[em10]哪位大虾给个详细的讲解啊