如果使用向量实现堆栈,那么在堆栈类析构函数中应该放什么?

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

这里的data是一个Vector对象。 我理解当Stack对象从内存中弹出时,最终data的析构函数将启动并删除data中的数组。但我是否也需要删除Stack对象存储的内存?如何做到这一点?谢谢。


你只是使用了 std::vector 吗?你在向量中存储的是什么类型? - NathanOliver
4
如果您没有使用 new 来创建任何东西,那么您就不需要使用 delete来释放任何东西。 - crashmstr
我正在使用一个自定义的Vector<T>类,它使用数组来存储数据。在Vector的析构函数中,我确实删除了该数组。 - Haris Irshad
自定义向量是否自我管理? - NathanOliver
4
非指针的成员变量会自动销毁。vector 的析构函数会释放其自身的内存。 - Mark Ransom
1个回答

4
这取决于您的vector ie数据存储的数据类型。 如果它是类似于“vector<int>”或其他不是指针的东西,则无需定义destructor,因为当data调用其自己的destructor时,data将为其每个元素调用析构函数。

但是,如果您正在使用vector<int*>或类似的指针,其中由vector(即data)持有的指针保存在堆上的变量上(即使用new关键字调用它们),则需要显式编写Stack析构函数,如下所示:-

~Stack()
{
     for (int i=0;i<data.size();++i)
     {
          delete data.at(i);  // or delete data[i]
     }
}
< p > Stack 对象存储的内存取决于其数据类型。如果数据类型被销毁,则 Stack 也将被销毁,释放其占用的内存。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接