Eri*_*ric 1 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;
};
Run Code Online (Sandbox Code Playgroud)
我没有看到任何内存管理错误 - 但我确实看到了其他几种错误.例如,什么时候发生T
的事情int
呢?:)
此外,将堆栈实现为链接列表是浪费的,并且与使用的堆栈deque
或vector
实现相比,执行相对较差std::stack
.
除了其他优秀的答案,还有一个注意事项:
if(size<1)
{
std::cerr<<"Stack underflow"<<endl;
exit(0);
}
Run Code Online (Sandbox Code Playgroud)
我建议assert
在这里考虑一个或一个例外.exit
有点鲁莽,但如果你决定exit
,不要退出0
:通常表示成功,这是你在错误中想要的最后一件事.
归档时间: |
|
查看次数: |
159 次 |
最近记录: |