形参在传递时申请空间干嘛?

卡卡西baby 2013-06-16 12:16:22

#include <iostream>
using namespace std;
template<class T>
class List{
public:
List();
void Add(T &); //在 Link 表头添加新结点
void Remove(T &); //在 Link 中删除含有特定值的元素
T* Find(T&); //查找含有特定值的结点
void PrintList(); // 打印输出整个链表
~List();
protected:
struct Node{
Node *pNext; //指向下一个结点
T *pT; //指向当前结点内容
};
Node *pFirst; //链首结点指针
};
template<class T>
List<T>::List(){
pFirst=NULL;
}
template<class T>
void List<T>::Add(T &pt){
Node *temp=new Node;
temp->pT=&pt;
temp->pNext=pFirst; //头指针给新结点的pNext
pFirst=temp; //头指针指向新结点
//delete temp;
}
template<class T>
void List<T>::Remove(T &pt){
Node *p=0;
if(*(pFirst->pT)==pt){ //先判断要删的是否是头结点,如是,头结点脱链
p=pFirst;
pFirst=pFirst->pNext;
}
else{ //查找,脱链
for(Node *q=pFirst;q->pNext;q=q->pNext)
if(*(q->pNext->pT)==pt){
p=q->pNext;
q->pNext=p->pNext;
break;
}
}
if(p) {delete[] p->pT;delete[] p;}
else cout<<"Not finding!\n";
}
template<class T>
T* List<T>::Find(T &pt){
for(Node *p=pFirst;p;p=p->pNext)
if(*(p->pT)==pt) return p->pT;
return 0;
}
template<class T>
void List<T>::PrintList(){
for(Node *p=pFirst;p;p=p->pNext) cout<<*(p->pT)<<"\t";
cout<<endl;
}
template<class T>
List<T>::~List(){
Node *p;
while(!pFirst){
p=pFirst;
pFirst=pFirst->pNext;
delete[] p->pT;
delete[] p;
}
}
int main(){
List<float> list;
cout<<"请输入链表内容,0结束\n";
for(int i=0;i<7;i++)
list.Add(* new float(i+0.4));
//为什么用下面的代码不行?
/* float i;
while(1){
cin>>i;
if(!i) break;
list.Add(i);
}
*/

list.PrintList();
return 0;
}



另外,还想请教下,这段程序在函数里动态申请的空间貌似没有释放,会造成内存泄露吗?
...全文
24 点赞 收藏 1
写回复
1 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
卡卡西baby 2013-06-16
(上面的代码75行,额。。。应该是只有文字说明的,新手不会发帖,所以。。。忽略吧~~) 程序正在写,所以主函数可能还没使用链表一些的功能 (新人求教,望各位大神不吝赐教啊~~)
回复
相关推荐
发帖
C++ Builder
创建于2007-08-02

1.3w+

社区成员

C++ Builder相关内容讨论区
申请成为版主
帖子事件
创建了帖子
2013-06-16 12:16
社区公告
暂无公告