【说明】这是测试函数,使用方法是在含有main()的cpp文件头部加入#include “listtest.h”,然后调用listtest_mobject()。这是一个简单的例子,可以看出,删除这样的链表节点需要两个步骤,先delete链表节点data域里指针所指的对象,然后才能删除链表节点。同样,析构这样链表的时候,也需要注意这个问题。不然的话,你的程序运行一次内存就少一点(可能不是这样,据说操作系统在程序中止时可以回收动态内存,但后面的结论是对的),如果是个频繁调用的函数,当运行一段时间后,你的系统就瘫痪了。所以,使用这样的链表最好是派生一个新的链表类,实现相应的操作。例如这样:
class shapelist : public list<shape*>
{
public:
bool sl_remove()
{
shape *p = *get();
delete p;
return remove();
}
};
【闲话】不知你是不是对这样的语句shape *p = *a.next(); p->print();不甚理解,还觉得有点罗嗦。那你试试这样的语句*a.next()->print();能不能编译通过。