如果使用Vector实现Stack,我应该在Stack类析构函数中添加什么?

时间:2015-10-12 18:53:48

标签: c++ stack destructor

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

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

1 个答案:

答案 0 :(得分:3)

这取决于您的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也将被销毁,释放它占用的内存。