主题:关于new重载的菜鸟问题
这是一个链表的节点类,其中重载了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]哪位大虾给个详细的讲解啊
//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]哪位大虾给个详细的讲解啊