返回信息流代码如下:
template<class T> class Stack
{
private:
class Node{
public:
T*pItem;
Node*pNext;
Node(T&rItem):pItem(&rItem),pNext(0){}
Node():pItem(0),pNext(0){}
};
Node*pHead;
public:
Stack():pHead(0){}
Stack(const Stack& aStack);
~Stack();
Stack& operator=(const Stack& aStack);
void push(T& rItem);
T&pop();
bool isEmpty(){return pHead==0;}
};
template<class T> Stack<T>::Stack(const Stack& aStack){
pHead=0;
if(aStack.pHead){
pHead=new Node(*aStack.pHead);
Node*pOldNode=aStack.pHead;
Node*pNewNode=pHead;
while(pOldNode=pOldNode->pNext){
pNewNode->pNext=new Node(*pOldNode);
pNewNode=pNewNode->pNext;
}
}
}
template<typename T>
Stack<T>& Stack<T>::operator=(const Stack& aStack){
if (this=&aStack)
return *this;
Node*pTemp;
while(pHead){
pTemp=pHead->next;
delete pHead;
pHead=pTemp;
}
if(aStack.pHead){
pHead=new Node(*aStack.pHead);
Node*pOldNode=aStack.pHead;
Node*pNewNode=pHead;
while(pOldNode=pOldNode->pNext){
pNewNode->next=new Node(*pOldNode);
pNewNode=pNewNode->pNext;
}
}
return *this;
}
template<class T> Stack<T>::~Stack(){
Node*pTemp;
while(pHead){
pTemp=pHead->pNext;
delete pHead;
pHead=pTemp;
}
}
template<class T>void Stack<T>::push(T& aItem){
Node*pTemp=pHead;
pHead=new Node(aItem);
//pHead->pItem=&aItem;
pHead->pNext=pTemp;
}
template<class T>T& Stack<T>::pop(){
T*pItem=pHead->pItem;
Node*pTemp=pHead;
pHead=pHead->pNext;
delete pTemp;
return *pItem;
}
红色这里不是delete了pTemp了吗,为啥还能返回*pItem?
谢谢~~~
这是一条镜像帖。来源:北邮人论坛 / cpp / #39421同步于 2010/5/20
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖
【求助】为什么delete后还能返回变量的引用?
lgsh
2010/5/20镜像同步6 回复
订阅后,新回复会通过你的通知中心匿名送达。
6 条回复
【 在 zzcc 的大作中提到: 】
: 指针只是指向一片内存,虽然内存中的东西部存在了,但是指针还是存在的啊
: 就好像大裤衩旁边那根东西烧掉了,但是路牌还是存在的一个道理
: --
: ...................
如果整个页帧都被释放的话,还是会产生Page fault
【 在 zzcc 的大作中提到: 】
: 指针只是指向一片内存,虽然内存中的东西部存在了,但是指针还是存在的啊
: 就好像大裤衩旁边那根东西烧掉了,但是路牌还是存在的一个道理
: --
: ...................
指针是存在啊,但是为啥他指向的item还能返回引用呢?
【 在 lgsh 的大作中提到: 】
: : 指针只是指向一片内存,虽然内存中的东西部存在了,但是指针还是存在的啊
: : 就好像大裤衩旁边那根东西烧掉了,但是路牌还是存在的一个道理
: : --
: ...................
因为内存不是按字节分配的,而是按块分配的。即使释放了item,如果整个块没被释放的话,item还是可用的。但是一旦该块被释放的话,item就不能用了,所以你不能期望引用被释放的内存会产生怎样的后果,有可能正确,也有可能不正确。
【 在 Ipjmc 的大作中提到: 】
: : : 指针只是指向一片内存,虽然内存中的东西部存在了,但是指针还是存在的啊
: : : 就好像大裤衩旁边那根东西烧掉了,但是路牌还是存在的一个道理
: : : --
: ...................
谢谢大家了。。。
也就是说这样的返回按道理是不能的,只是结果能够显示而已?
哎。。这个楼从1楼开始就歪了啊
没仔细看代码,但是基本的不就是一个链表实现堆栈的代码吗?pTemp指向链表的一个节点而已,而pItem指向的是这个节点存放的值的地址啊。。他俩都不是一个东西,为什么不能呢?