如果 Stack 是使用 Vector 实现的,我应该在 Stack class 析构函数中放入什么?

What should I put in Stack class destructor if the Stack is implemented using a Vector?

class Stack{
public:
    Stack(int capacity){
        data.reserve(capacity);
        theSize = 0;
    }
    ~Stack(){
        //What should I put here?
    }

这里的data是Vector的一个对象。 据我所知,当 Stack 对象从内存中弹出时,最后,数据的析构函数()将启动并删除数据中的数组。但是我是否也必须删除 Stack 对象存储的内存?我该怎么做呢?谢谢。

这取决于您的 vector ie data 存储的数据类型。如果它类似于“vector<int>”或不是指针的东西,那么您不需要定义 destructor 因为 data 会在它需要时为它的每个元素调用析构函数呼叫 its own destructor.

但是,如果您使用 vector<int*> 或类似的东西,其中 vector (ie data) 持有的指针在堆上持有变量(即它们使用 new 关键字调用),那么您需要显式地将 Stack 析构函数写为 :-

~Stack()
{
     for (int i=0;i<data.size();++i)
     {
          delete data.at(i);  // or delete data[i]
     }
}

Stack 对象存储的内存将取决于其数据类型。如果数据类型被销毁,那么 Stack 也将被销毁,释放它占用的内存。