c++ - 我在这里正确管理内存了吗? (简单的 C++ 堆栈)

标签 c++ memory-management

我是一个动态分配内存的菜鸟。这会导致内存泄漏或任何其他内存问题吗?

#include <iostream.h>

template <class T> class stack
{
         struct node
         {
                T value;
                node* next;
         };

         public:
                stack()
                {
                       size = 0;
                }

                ~stack()
                {
                       while(size > 0)
                       {
                           node *n = top->next;
                           delete top;
                           top = n;
                           size--;
                       }
                }

                void push(T value)
                {
                     node *n = new node;
                     n->value = value;

                     if(size == 0)
                     {
                          top = n;
                     }
                     else
                     {
                         n->next = top;
                         top = n;
                     }

                     size++;
                }

                T pop()
                {
                       if(size<1)
                       {
                            std::cerr<<"Stack underflow"<<endl;
                            exit(0);
                       }
                       else
                       {
                           node* n = top;
                           int val = n->value;
                           top = n->next;

                           delete n;
                           size--;

                           return val;
                       }
                }

                int getSize()
                {
                    return size;
                }

        private:
                int size;
                node *top;
};

最佳答案

我没有看到任何内存管理错误——但我确实看到了其他几种错误。例如,当 T 不是 int 时会发生什么? :)

此外,将堆栈实现为链表是一种浪费,与 std 使用的 dequevector 实现相比,性能相对较差: :堆栈

关于c++ - 我在这里正确管理内存了吗? (简单的 C++ 堆栈),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3592968/

相关文章:

java - 如何以编程方式捕获 Oracle Virtualbox 计算机屏幕?

c++ - 这可能是由于堆损坏,这表明 testcrypto.exe 或它加载的任何 DLL 中存在错误

iphone - 将 CFRelease 用于 ABRecordCopyValue 时内存仍在增加?

javascript - 我应该取消绑定(bind)事件监听器以防止内存泄漏吗?

.net - 对数组进行维数时,为每个元素分配了多少内存?

c - Rebol 3 扩展和 "handles"

C++98/03 std::is_constructible 实现

c++ - "1 unresolved externals"C++

c++ - 如果从.dll 导入函数,为什么我们需要.lib 文件?

c - 在循环中为结构内的结构分配内存