#pragma once // Link.h
#include <memory>
template <typename E>
class Link
{
private:
static Link<E> * freelist; // Pointer to the freelist head
// How to release the memory??
public:
E element;
Link *next;
Link(const E &eleval, Link *nextval = nullptr)
: element(eleval)
, next(nextval) {}
Link(Link *nextval = nullptr) : next(nextval) {}
/*~Link()
{
while (freelist->next != nullptr)
{
Link<E> *tmp = freelist;
freelist = freelist->next;
delete tmp;
}
}
*/
void *operator new(size_t)
{
if (freelist == nullptr) return ::new Link;
Link<E>* temp = freelist;
freelist = freelist->next;
return temp;
}
void operator delete(void* ptr)
{
((Link<E>*)ptr)->next = freelist;
freelist = (Link<E>*)ptr;
}
};
template <typename E>
Link<E>* Link<E>::freelist = nullptr;
Link 类中有一个静态指针,旨在将 freelist 存储在我的链表中,我想在程序结束后释放这个 freelist 的内存。如何删除此 freelist 的内存。
PS:我试图像这样释放内存:
/*~Link()
{
while (freelist->next != nullptr)
{
Link<E> *tmp = freelist;
freelist = freelist->next;
delete tmp;
}
}
*/
但程序无故终止。