为什么这种自动存储结构仍然存在

Why does this automatic-storage structure still exist?

本文关键字:结构 存在 存储 为什么      更新时间:2023-10-16

代码

stack.h:

struct customer
{
    char fullname[35];
    double payment;
};
typedef customer Item;
class Stack
{
private:
    ...
    Item items[MAX];
public:
    ...
    bool push(const Item & item);
    bool pop(Item & item);
};

main.cpp:

#include "stack.h"
...
int main()
{
    Stack s; double total;
    while (1)
    {
        ...
        cin >> c;
        switch (c)
        {
        case '1': push(s);
            break;
        case '2': pop(s, total);
            break;
        ...
        }
    }
    ...
}
void push(Stack & s)
{
    Item newitem;
    cout << "name -- ";    cin >> newitem.fullname;
    cout << "payment -- "; cin >> newitem.payment;
    s.push(newitem);
}
void pop(Stack & s, double & total)
{
    Item olditem;
    s.pop(olditem);
    total += olditem.payment;
}

备注

main()的大部分内容可能无关紧要,但我只是想展示一下我在做什么。CCD_ 4和CCD_。

上面的代码应该用Item s填充堆栈。当弹出Item时,它的payment被添加到正在运行的total中。

同时,用main()中的函数来区分Stack方法pop()push()


困境

代码完全按照我的意愿工作,但我不明白为什么

我在push()函数中创建了一个本地Item。它被引用并放置在Stack上。但是,当push()功能结束时,这个本地Item是否应该被删除,因为它在自动存储中?然而,不知何故,它仍然存在,因为当我调用pop()时,它就在那里。

表达式items[top] = item使用copy赋值运算符来复制结构。