实现一个栈 T为引用为什么不行

原因是T为引用,T为对象时,当跳出作用域,(保存在栈中)析构了。

Stack.h

#ifndef STACK_H

#define STACK_H


template<typename T>
class Stack
{
private:
struct Link
{
const T& value;
Link* next;
Link(const T& val,Link* nxt):value(val),next(nxt){}
}*Head;
public:
Stack():Head(NULL){}
virtual ~Stack()
{
while (Head)
{
pop();
}
}
void push(const T& val)
{
Head=new Link(val,Head);
}
const T& top() const
{
assert(Head!=NULL);
return Head->value;
}
void pop()
{
assert(Head!=NULL);
Link* oldHead=Head;
Head=Head->next;
delete oldHead;
}
};

#endif


Test.cpp

#include <iostream>
#include <fstream>
#include <string>
#include <cassert>
#include "Stack.h"
using namespace std;


int main(int argc,char* argv[])
{
Stack<string> textline;
for (int i=0;i<4;i++)
{
const string& s="123";
textline.push(s);
}
for (int i=0;i<4;i++)
{
cout<<textline.top()<<endl;
textline.pop();
}

system("pause");
return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值